データをディクショナリ形式で受け取っており、それを動的オブジェクトにデシリアライズしたいと考えています。ツイストは、辞書のキーが階層オブジェクトを表現することです。2 番目のひねりは、キーの一部が配列や辞書のプロパティを表現することです。
例えば:
===========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;
}
}
これにアプローチするためのより良い方法についてのアイデアはありますか?
ありがとう、