JSON反序列化后对象与动态创建的对象之间的映射
问题描述:
如何通过实例化一个类创建的对象与由JSON反序列化(JsonConvert)创建的动态对象之间的映射考虑到我不知道动态对象的字段?换句话说,我想更新按名称匹配的动态对象字段。JSON反序列化后对象与动态创建的对象之间的映射
这是我的示例代码:
string json = {\"NDG\":7803, \"NumberOfNights\":2, \"Nome\":\"Ago\", \"Cognome\":\"Mar\", \"CognomeNome\":\"\"};
string djson = ?? //I don't know the structure coming from a call as parameter but I know there are some json string identical fields
public class myVars
{
public string Userid { get; set; }
public string Nome { get; set; }
public string Cognome { get; set; }
public string CognomeNome { get; set; }
}
myVars object1 = JsonConvert.DeserializeObject<myVars>(json);
dynamic object2 = JObject.Parse(djson); // object2 contains a field named "CognomeNome"
myVars.CognomeNome = myVars.Cognome + myVarsNome;
MapObjects(object1 , object2);
string rjson = JsonConvert.SerializeObject(object2); //returns {"CognomeNome":""}
public static object MapObjects(object source, object target)
{
foreach (PropertyInfo sourceProp in source.GetType().GetProperties())
{
PropertyInfo targetProp = target.GetType().GetProperties().Where(p => p.Name == sourceProp.Name).FirstOrDefault();
if (targetProp != null && targetProp.GetType().Name == sourceProp.GetType().Name)
{
targetProp.SetValue(target, sourceProp.GetValue(source));
}
}
return target;
}
答
最简单的方法是使用现有的automappers之一(Alternatives to AutoMapper)
例如,这样的: https://github.com/agileobjects/AgileMapper/wiki/Performing-Updates听起来就像是你在问什么。
你到目前为止尝试过什么? –
您需要为您的问题添加更多信息才能负责(例如,也许?)。看起来['AutoMapper'支持](https://github.com/AutoMapper/AutoMapper/wiki/Dynamic-and-ExpandoObject-Mapping)for'dynamic',所以这大概延伸到'JObject' – StuartLC
可能的重复[如何从一个静态对象创建一个动态对象?](https://stackoverflow.com/questions/23156815/c-sharp-how-to-create-a-dynamic-object-from-a-static-object ) – derloopkat