我有解析給定的JSON數據這個奇怪的問題。我有這樣的JSON結構:Newtonsoft JSON.NET解析到自定義鍵/值對對象的數組
{"value":[
{"street":"Karlova 25"},
{"city":"Prague"},
{"gpsLat":"50.1571"},
{"gpsLon":"15.0482"}
]}
如何使用Newtonsoft JSON.NET庫解析這個結構呢?我試圖用我自己的JsonConverter類:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer){
JArray jarray = (JArray)((JTokenReader)reader).CurrentToken;
List<AddressValue> values = new List<AddressValue>();
foreach (var jobj in jarray.Children<JObject>()){
foreach (JProperty prop in jobj.Properties()){
values.Add(new AddressValue() { Label = prop.Name, Value = prop.Value.ToString() });
}
}
return values.ToArray();
}
class AddressValue{
public string Label { get; set; }
public string Value { get; set; }
}
,但我有一個例外:
Exception thrown: 'Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.DLL
Additional information: Unexpected token when deserializing object: StartObject. Path 'value[0]'.
編輯: 我也試過這個保存到詞典:
[JsonProperty(PropertyName = "value")]
public Dictionary<string, string> Value{get; set;}
但我還有一個例外:
$exception {"Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.Dictionary`2[System.String,System.String]' because the type requires a JSON object (e.g. {\"name\":\"value\"}) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON object (e.g. {\"name\":\"value\"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.\r\nPath 'param.value'."}
我做錯了什麼?謝謝您的回答。
在Visual Studio中,您可以編輯 - >選擇性粘貼 - >將JSON粘貼爲類,然後DeserializeObject(stringData)。 –
crashmstr
這不是一個數組,它是一個最糟糕的詞典,但是您應該能夠聲明一個Address類,其中的屬性與JSON鍵相同,並直接進行反序列化。 @crashmstr的評論可能適用於較新版本的VS,但創建目標類也是一種選擇。 – Eris
我忘了補充說,但保存在字典中的數據也不工作。我將編輯我的問題:-) –