我得到了这样的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。