我正在以字典形式接收数据,并希望将其反序列化为动态对象。扭曲是字典键表示分层对象。第二个转折点是一些键表示数组和/或字典属性。
例如:
===========Key================ ======Value========
Person.First | John
Person.Last | Doe
Person.Phone[Work] | 999-555-1234
Person.Phone[Home] | 999-555-1235
Person.Addresses[Home].Street | 101 My Street
Person.Addresses[Home].City | AnyTown
Person.Spouse.First | Jane
Person.Spouse.Last | Doe
Person.Insurance[0].Name | Medicare
Person.Insurance[0].GroupNum | 1234567
编辑:添加数组示例
我试图找到一种简单的方法来创建一个对象,然后可以在运行时表达式评估器中使用该对象。
这是我第一次尝试适用于简单属性,但不尝试处理数组
public static class DynamicBuilder
{
public static object Build(IDictionary<string, object> dict)
{
ExpandoObject root = new ExpandoObject();
foreach (var item in dict)
{
var objDict = (IDictionary<string, object>)root;
var parts = item.Key.Split('.');
for (int i = 0; i < parts.Length ; i++)
{
string propName = parts[i];
if (i < parts.Length - 1)
{
if (!objDict.ContainsKey(propName))
{
dynamic temp = new ExpandoObject();
objDict.Add(propName, temp);
objDict = (IDictionary<string, object>)temp;
}
else
{
objDict = (IDictionary<string, object>)objDict[propName];
}
}
else
{
if (objDict.ContainsKey(propName))
objDict[propName] = item.Value;
else
objDict.Add(propName, item.Value);
}
}
}
return root;
}
}
关于更好的方法来解决这个问题的任何想法?
谢谢,