ich Json Objekt wie folgt bekam -Wie in EXPANDO Objekt suchen
und einige Zeiten wie diesen -
So ist die Reihenfolge des Objekts nicht festgelegt ist. Im obigen Beispiel muss das Feld "CreatedOn" im DB gespeichert werden.
Ich verwende folgenden Code es in ExpandoObject zu konvertieren -
JObject jsonObject = JObject.Parse(json);
// eval into an expando
dynamic dynObject = ConvertJTokenToObject(jsonObject);
und hier 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");
}
Nun ist das Problem, dass ich weiß nicht, welche "Dimension" Element wird " CreatedOn "Feld.
Das funktioniert gut mit dem ersten Fall -
dynObject.context.custom.dimensions[0].CreatedOn
aber bricht in einem anderen Fall, wie es sein sollte -
dynObject.context.custom.dimensions[1].CreatedOn
Wie von Feldern Namen wie "CreatedOn" suchen ExpandoObject " Status "usw.
1) Newtonsoft hat [eingebaute Fähigkeit deserialisieren zu 'ExpandoObject'] suchen können (http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Converters_ExpandoObjectConverter.htm). Tun Sie einfach 'dynamic dynObject = jsonObject.ToObject();' 2) Aber warum überhaupt? Bleiben Sie einfach bei 'JToken' und verwenden Sie [' SelectToken'] (http://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm) oder ['dynamic'] (http://www.newtonsoft.com) /json/help/html/QueryJsonDynamic.htm). –
dbc
@dbc, yeah Ich habe SelectToken benutzt und es hat funktioniert! –