简体   繁体   English

AutoMapper映射无法正常工作JObject / Json

[英]AutoMapper mapping not working properly JObject/Json

I'm trying to map JObject to POCO class using Automapper, It mapped only same name property and ignore method does not work. 我正在尝试使用Automapper将JObject映射到POCO类,它仅映射了相同的name属性,而ignore方法不起作用。

I'm not sure AutoMapper support Json to POCO class mapping or Is it an issue with my configuration? 我不确定AutoMapper是否支持Json到POCO类的映射,还是我的配置有问题?

internal class Program
{
    private static void Main(string[] args)
    {
        AutoMapperConfiguration.Configure();

        string json = File.ReadAllText("jsonData.json");
        JArray assets = JArray.Parse(json);
        List<AssetDTO> assetDTOList = Mapper.Map<List<AssetDTO>>(assets);
    }
}

public class AutoMapperConfiguration
{
    public static void Configure()
    {
        AutoMapper.Mapper.Initialize(x => x.AddProfile<AssetProfile>());
    }
}

public class AssetProfile : Profile
{
    public AssetProfile()
    {
        CreateMap<JObject, AssetDTO>()
            .ForAllMembers(dest => dest.Ignore());

        CreateMap<JObject, AssetDTO>()
            .ForMember(dest => dest.AssetId, o => o.MapFrom(j => j["AssetId"]))
            .ForMember(dest => dest.Type, o => o.MapFrom(j => j["AssetType"]))
            .ForMember(dest => dest.DeviceSerialNumber, o => o.MapFrom(j => JArray.Parse(j["Device"].ToString())[0]["SerialNumber"]));
    }
}

public class AssetDTO
{
    public string AssetId { get; set; }
    public string DeviceSerialNumber { get; set; }
    public string Type { get; set; }
}

jsonData.json jsonData.json

[
{
"AssetType": "Paver",
"AssetId": "PaverId100",
"ContactName": "ContactName",
"Description": "description",
"Device": [
  {
    "Make": "BP02",
    "SerialNumber": "BPPA0001",
    "Ucid": null,
    "Address": {
      "AddressLine1": "address 1",
      "AddressLine2": "add 2",
      "City": "city",
      "State": "B'lore",
      "ZipCode": "124578",
      "Country": "India"
    }
  }
]
}
]

Github repo for sample code Github回购示例代码

For now I resolved this. 现在,我解决了这个问题。 The issue I observed that Jarray does not work like List and Array, so I iterated over JArray and convert each JObject to POCO. 我观察到的问题是Jarray不能像List和Array一样工作,所以我遍历JArray并将每个JObject转换为POCO。

private static void Main(string[] args)
    {
        AutoMapperConfiguration.Configure();

        string json = File.ReadAllText("jsonData.json");
        JArray assets = JArray.Parse(json);
        List<AssetDTO> assetDTOList = new List<AssetDTO>();

        for (int i = 0; i < assets.Count; i++)
        {
            JObject jObject = JObject.Parse(assets[i].ToString());
            AssetDTO assetDTO = Mapper.Map<AssetDTO>(jObject);
            assetDTOList.Add(assetDTO);
        }

    }

Github repo for sample code Github回购示例代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM