我有课
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吗?
答案 0 :(得分:4)
似乎您想要对JSON进行序列化/反序列化。在这种情况下,您可以引用Newtonsoft.Json并使用不依赖于任何特定类的(function (){
var app = angular.module('starter');
app.controller('NumberController',function($scope){
$scope.items =
[
1,2,3,4,5,6,7,8,9,10
]
/* i want my program to print numbers form 1 to 100 dynamically */
});
})();
/ JsonConvert.SerializeObject
泛型方法:
反序列化(从字符串到类实例):
JsonConvert.DeserializeObject
序列化(从类实例到字符串):
var foo = JsonConvert.DeserializeObject<Foo>(jsonString);
再多一点(映射)
此外,您可能希望使用某些属性来装饰您的类以指定映射:
var stringValue = JsonConvert.SerializeObject(foo)
答案 1 :(得分:0)
部分 AutoMapper无法映射到字典或ExpandoObject,所以没有。
在我意识到通过映射到ExpandoObject Automapper之后,我发布了以下解决方案,只会为您留下一个空对象。
我认为最简单的解决方案(假设你想要一个ExpandoObject):
public ExpandoObject Map<TInput>(TInput inputObject)
{
dynamic result = new ExpandoObject();
result.properties = Mapper.DynamicMap<TInput, ExpandoObject>(inputObject);
return (ExpandoObject)result;
}
据我所知,你不能使用automapper将所有成员作为子属性委托给另一个字段,但是你自己很容易做到这一点。 AutoMapper在这里完全没用。
编辑:似乎自动播放器与ExpandoObject斗争......实际上,似乎AutoMapper根本无法做到这一点,所以你留下了反思。
然后,您将编写一个反射对象,该对象可以使用对象属性创建或填充字典。