Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Automapper(C#)将JObject转换为类的有效方法_C#_Automapper - Fatal编程技术网

用Automapper(C#)将JObject转换为类的有效方法

用Automapper(C#)将JObject转换为类的有效方法,c#,automapper,C#,Automapper,我需要将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; }

我需要将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;
}
公共字符串json=@”
{
“索引”:“匕首”,
“姓名”:“匕首”,
“装备类别”:“武器”
}"
公共级设备
{
公共字符串索引{get;set;}
公共字符串名称{get;set;}
公共字符串设备类别{get;set;}
}
公共设备转换()
{
变量配置=新的MapperConfiguration(配置=>
{
config.CreateMap()
.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[“设备”类别])
}
var mapper=config.CreateMapper();
var result=mapper.Map(JObject.Parse(json));
返回结果;
}

这样做的缺点是我必须为对象中的每个属性创建一个
FormMember
规则。有人知道更有效的方法吗?

您不需要Automapper将json转换为POCO(设备类)。使用
JsonConvert.DeserializeObject(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);
stringjson=@”
{
“索引”:“匕首”,
“姓名”:“匕首”,
“装备类别”:“武器”
}"
var设备=JsonConvert.DeserializeObject(json);
一旦您有了一个POCO实例,Automapper就可以方便地将这个类映射到另一个POCO

var result = mapper.Map<EquipmentDto>(equipment);
var result=mapper.Map(设备);
Newtonsoft序列化和反序列化JSON
将json转换为POCO(设备类)不需要Automapper。使用
JsonConvert.DeserializeObject(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);
stringjson=@”
{
“索引”:“匕首”,
“姓名”:“匕首”,
“装备类别”:“武器”
}"
var设备=JsonConvert.DeserializeObject(json);
一旦您有了一个POCO实例,Automapper就可以方便地将这个类映射到另一个POCO

var result = mapper.Map<EquipmentDto>(equipment);
var result=mapper.Map(设备);
Newtonsoft序列化和反序列化JSON

如果出于某种原因您已经有了一个作业对象而不是字符串,那么
obj.ToObject()
如果出于某种原因您已经有了一个作业对象而不是字符串,那么
obj.ToObject()