使用属性名称和值映射对象

时间:2015-08-06 05:24:06

标签: c#

我有课

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吗?

2 个答案:

答案 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根本无法做到这一点,所以你留下了反思。

然后,您将编写一个反射对象,该对象可以使用对象属性创建或填充字典。