具有属性名称和值的映射对象
本文关键字:映射 对象 属性 | 更新日期: 2023-09-27 18:06:32
我有class
public class Foo
{
public string Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
我想将对象转换为泛型对象
{
"properties": {
"id" : "1234",
"name": "John Doe",
"email" : "john.doe@mail.com"
}
}
我想将类实例转换为结构,其中属性将根据类动态变化。这在Automapper中是否可行?
似乎您想要序列化/反序列化到/从JSON。在这种情况下,您可以引用Newtonsoft。Json,并使用不依赖于任何特定类的JsonConvert.SerializeObject
/JsonConvert.DeserializeObject
泛型方法:
反序列化(从字符串到类实例):
var foo = JsonConvert.DeserializeObject<Foo>(jsonString);
序列化(从类实例到字符串):
var stringValue = JsonConvert.SerializeObject(foo)
One More Point (Mapping)
你也可能想用一些属性来装饰你的类来指定映射:
[DataContract]
public class Foo
{
[DataMember(Name = "id")]
public string Id {get;set;}
[DataMember(Name = "name")]
public string Name {get;set;}
[DataMember(Name = "email")]
public string Email {get;set;}
}
在我意识到通过映射到ExpandoObject Automapper将简单地留给您一个空对象之前,发布了以下解决方案。
我认为最简单的解决方案是这样的(假设你想要一个ExpandoObject作为结果):
public ExpandoObject Map<TInput>(TInput inputObject)
{
dynamic result = new ExpandoObject();
result.properties = Mapper.DynamicMap<TInput, ExpandoObject>(inputObject);
return (ExpandoObject)result;
}
编辑:似乎automapper与ExpandoObject斗争…实际上,看起来AutoMapper根本无法做到这一点,所以你只能使用反射。
然后编写一个反射对象,该对象可以用对象的属性创建或填充字典。