Эффективный способ преобразования JObject в класс с помощью Automapper (C#) - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно преобразовать JSON в пользовательский объект, для этого я использую AutoMapper. Это мой код, и он в настоящее время работает:

public string json = @"
{
  'index': 'dagger',
  'name': 'Dagger',
  'equipment_category': 'weapon'
}"

public class Equipment
{
  public string Index { get; set; }
  public string Name { get; set; }
  public string EquipmentCategory { get; set; }
}

public Equipment Convert()
{
  var config = new MapperConfiguration(config =>
  {
    config.CreateMap<JObject, Equipment>()
      .ForMember(dest => dest.Index, opt => opt.MapFrom(src => src["index"])
      .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src["name"])
      .ForMember(dest => dest.EquipmentCategory, opt => opt.MapFrom(src => src["equipment_category"])
  }
  var mapper = config.CreateMapper();
  var result = mapper.Map<Equipment>(JObject.Parse(json));

  return result;
}

Обратной стороной этого является то, что мне нужно создать правило ForMember для каждого свойства объекта. Кто-нибудь знает более эффективный способ сделать это?

1 Ответ

1 голос
/ 27 мая 2020

Вам не нужен Automapper для преобразования json в POCO (класс оборудования). Используйте JsonConvert.DeserializeObject<T>(json) вместе с JsonPropertyAttribute. «Отображение» будет выполнено за вас с помощью десериализатора Newtonsoft.

public class Equipment
{
    [JsonProperty("index")]
    public string Index { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("equipment_category")]
    public string EquipmentCategory { get; set; }
}

Десериализация в POCO

string json = @"
{
  'index': 'dagger',
  'name': 'Dagger',
  'equipment_category': 'weapon'
}"
var equipment = JsonConvert.DeserializeObject<Equipment>(json);

После того, как у вас есть экземпляр POCO, Automapper становится удобным для сопоставления этого класса в другой POCO.

var result = mapper.Map<EquipmentDto>(equipment);

Newtonsoft Сериализация и десериализация JSON https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

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