【发布时间】:2021-12-25 18:07:44
【问题描述】:
我有两个这样的模型
public class ModelA
{
public string Name{get;set;}
public string Value{get;set;}
}
public class B
{
public List<ModelA>Items{get;set;}
}
下面的输入将被反序列化到class B
{
"Items":[
{
"Name":"Food Name"
"Value":"Fries"
},
{
"Name":"Weapon Name"
"Value":"Gun"
},
{
"Name":"Vehicle Name"
"Value":"Car"
}
]
}
我还有如下第三个模型
public class ModelValues
{
public string FoodName{get;set;}
public string WeaponName{get;set;}
public string VehicleName{get;set;}
}
我想将 model A 的相应值添加到 ModelValues 类中,就像 FoodName 属性的值应该是 Fries。是否有任何简单的方法可以将该 class A 的值分配给 ModelValues。 我知道我们可以使用类似的东西
public void AssignValues(B products)
{
ModelValues values=new ModelValues();
values.FoodName=products.Find(x=>x.Name=="Food Name").Value;
values.WeaponName=products.Find(x=>x.Name=="Weapon Name").Value;
}
在实际实现中,由于 ModelValues 中的项目和输入会很大,我希望避免这种逐行分配值。有没有什么办法只用几行代码就可以完成这项工作
【问题讨论】:
-
您可以尝试使用AutoMapper库并创建类型之间的映射配置
-
您可以使用自动映射器。或者,为了好玩,你可以做你自己的事。可以说,声明
MappingPropertyAttribute。然后在所有模型上,您可以列出属性映射到的所有名称 -MappingProperty("prop1", "prop2")。然后有任何型号的扩展名,如model1.HydrateTo(model2)。您的代码将填充匹配名称和数据类型的属性。或者你甚至可以尝试转换一些数据类型。 -
你能把json数据比如
Food Name改成FoodName吗? -
既然
B旨在用作查找,请将其设为Dictionary<Tkey,TValue>以使查找更快更自然。 -
@Saeed Esmaeelinejad 无法更改 json 数据,因为我是从外部来源获取的