このようなjsonオブジェクトを取得しました-
そして時々このような -
したがって、オブジェクトの順序は固定されていません。上記の例では、「CreatedOn」フィールドを DB に格納する必要があります。
次のコードを使用して expandoobject に変換しています -
JObject jsonObject = JObject.Parse(json);
// eval into an expando
dynamic dynObject = ConvertJTokenToObject(jsonObject);
ここで ConvertJTokenToObject -
public object ConvertJTokenToObject(JToken token)
{
if (token is JValue)
{
return ((JValue)token).Value;
}
if (token is JObject)
{
ExpandoObject expando = new ExpandoObject();
(from childToken in ((JToken)token) where childToken is JProperty select childToken as JProperty).ToList().ForEach(property =>
{
((IDictionary<string, object>)expando).Add(property.Name, ConvertJTokenToObject(property.Value));
});
return expando;
}
if (token is JArray)
{
object[] array = new object[((JArray)token).Count];
int index = 0;
foreach (JToken arrayItem in ((JArray)token))
{
array[index] = ConvertJTokenToObject(arrayItem);
index++;
}
return array;
}
throw new ArgumentException(string.Format("Unknown token type '{0}'", token.GetType()), "token");
}
さて、問題は、どの「ディメンション」要素に「CreatedOn」フィールドがあるかわからないことです。
これは最初のケースでうまく機能します -
dynObject.context.custom.dimensions[0].CreatedOn
しかし、そうあるべきであるように、別のケースで壊れます-
dynObject.context.custom.dimensions[1].CreatedOn
「CreatedOn」、「Status」などのフィールド名で expandoobject を検索する方法