Отображение AutoMapper не работает должным образом JObject / Json - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь сопоставить JObject с классом POCO, используя Automapper. Он сопоставил только одно и то же свойство name, а метод ignore не работает.

Я не уверен, что 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

[
{
"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 репозиторий для примера кода

1 Ответ

0 голосов
/ 12 октября 2018

Пока я решил это.Проблема, с которой я столкнулся, заключалась в том, что 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 репозиторий для примера кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...