我需要将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