public Wrapper(object value)
{
_value = value;
Accessor = TypeAccessor.Create(value.GetType());
var atts = value.GetType().GetProperties().SelectMany(p => p.CustomAttributes).SelectMany(g => g.NamedArguments).Where(c => c.MemberName == "Name")
.Select(v => v.TypedValue.Value.ToString());
Map = value.GetType().GetProperties()
.Select(x => new
{
Name = x.Name, Att = x.CustomAttributes.SelectMany(v => v.NamedArguments).Where(c => c.MemberName == "Name").Select(v => v.TypedValue.Value.ToString()).FirstOrDefault()
})
.ToDictionary(key => key.Name, val => val.Att ?? val.Name);
if (!Map.ContainsKey("@id"))
{
Map.Add("@id", "@id");
}
if (!Map.ContainsKey("@context"))
{
Map.Add("@context", "@context");
}
if (!Map.ContainsKey("@type"))
{
Map.Add("@type", "@type");
}
// Map = Map.Concat(GetType().GetProperties()
// .Select(x => new
// {
// Name = x.Name, Att = x.CustomAttributes.SelectMany(v => v.NamedArguments).Where(c => c.MemberName == "Name").Select(v => v.TypedValue.Value.ToString()).FirstOrDefault()
// })
// .ToDictionary(key => key.Name, val => val.Att ?? val.Name)).ToDictionary(x => x.Key, x => x.Value);
var others = value.GetType().GetProperties().Where(x => x.CustomAttributes.All(y => y.AttributeType != typeof(DataMemberAttribute))).Select(c => c.Name);
var thisatts = GetType().GetProperties().SelectMany(p => p.CustomAttributes).SelectMany(g => g.NamedArguments).Where(c => c.MemberName == "Name")
.Select(v => v.TypedValue.Value.ToString());
MemberNames = atts.Concat(others).Concat(thisatts).ToArray();
MemberNames = Accessor.GetMembers().Select(a => a.Name).Concat(GetType().GetProperties().Select(p => p.Name)).ToArray();
MemberNames = Map.Values.Select(x => x).ToArray();
}