一种使用自动映射器(C#)将JObject转换为类的有效方法



我需要将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规则。有谁知道更有效的方法吗?

您不需要 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 实例,自动映射器就可以方便地将这个类映射到另一个 POCO。

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

Newtonsoft 序列化和反序列化 JSON https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

相关内容

最新更新