【问题标题】:Automapper Not Mapping JObject To POCO Not Mapping IntAutomapper 未将 JObject 映射到 POCO 未映射 Int
【发布时间】:2018-11-09 21:03:14
【问题描述】:

示例代码

    JToken json = JObject.Parse(
        " {\"Url\": \"www.fakeUrl.com\",\"CallId\": 12}");

    var poco = mapper.Map<CallData>(json);

    Console.WriteLine(json);
    Console.WriteLine(poco.Url + " " + poco.CallId); 

简单模型

   public class CallData
    {
        public int CallId { get; set; }
        public string Url { get; set; }
    }

输出

{ "Url": "www.fakeUrl.com", "CallId": 12 }

www.fakeUrl.com 0

我只是好奇为什么 Automapper 不映射这个 JSON 对象中的整数?我知道有替代方案,例如为此的自定义扩展,但我想知道为什么 AutoMapper 不能做这个简单的地图?

Automapper V7.0.1

【问题讨论】:

  • 代码似乎正确。您是否尝试过使用JObject 而不是JToken?。 Json.net 可能有些奇怪。
  • 是的,尝试了 JToken 仍然没有,我也只是在 Automappers GitHub 上打开一个问题
  • 感谢@OrelEraki,这很有用,但是我仍然觉得这里存在问题,因为 Automapper 应该能够映射这种原始类型而无需扩展。它映射字符串而不是整数?我正在寻找答案而不是替代解决方案
  • 将您的代码与自定义映射组合it can be done 似乎有一些代码使用 TypeConverters codingcanvas.com/mapping-json-to-objects-using-automapper

标签: c# json.net automapper .net-core-2.1


【解决方案1】:

我通过添加自定义映射解决了这个问题。我仍然认为这是下划线库的问题,并将进一步调查,因为这个简单的原始映射不需要扩展。

映射器

CreateMap<dynamic ,CallData>().ConvertUsing((jo) =>
{
    var callData = new CallData();
    JsonSerializer serializer = new JsonSerializer();
    if(jo != null)
     serializer.Populate((JsonReader) jo.CreateReader(), callData);
    return callData;
});

用法

var response =_mapper.Map<dynamic, CallData>(_callData);

【讨论】:

  • AM 不引用 Newtonsoft.Json(不,json 对象不是原始类型)。但是这种支持可以很容易地添加到 AM 之外。 AM 仅直接支持内置类型。
猜你喜欢
  • 2022-01-04
  • 2017-08-29
  • 2018-03-19
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多