[英]Deserialization of JSON Object as array
我們有一個JSON結構,我們從服務器向客戶端發送一組鍵值配對。 為了簡潔和整潔,我們發送如下數據:
"identification": {
"lineItem/latestDate": "2013-04-28",
"lineItem/destination": "test",
"lineItem/quantity": "55"
}
而不是這個:
"identification": [
{
"value": "test",
"type": "lineItem/destination"
},
{
"value": "2014-07-25",
"type": "lineItem/latestDate"
},
{
"value": "55",
"type": "lineItem/quantity"
}
]
問題是我們的下游客戶端(使用C#處理JSON)表示他們無法處理第一種格式,因為內置的json.net功能不支持它,並且他們不知道可以做到的另一種。
是否可以使用C#中內置的JSON反序列化反序列化第一種格式? 或者有沒有人知道另一個可以解決這個問題的圖書館? 我看了一下這個問題 ,對我來說看起來很可能。
在這里,我找到了另一種方法,好消息是我們不必更改關鍵名稱。
在客戶端創建一個類:
public class RootObject
{
public Dictionary<string,string> identification { get; set; }
}
現在,反序列化它:
string data = @"[
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
},
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
},
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
}]";
List<RootObject> ob = JsonConvert.DeserializeObject<List<RootObject>>(data);
賓果,我們又做了。
1)現在,ob對象具有所需的值。
2)使用值數組。
3)也支持迭代。
1)鑒於第一個JSON無效,在開始時需要左括號,從最后刪除一個額外的逗號。
2)如果您的客戶端可以使用Newtonsoft.Json,您可以在密鑰中使用“_”而不是“/”,因為c#中不支持名稱中帶有“/”的標識符
客戶端:
創建類為
public class Identification
{
public string lineItem_latestDate { get; set; }
public string lineItem_destination { get; set; }
public string lineItem_quantity { get; set; }
}
public class RootObject
{
public Identification identification { get; set; }
}
注意:如果您有更多鍵/值對,則可以向類標識添加更多屬性
現在,將其反序列化為:
string data = @"[
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
},
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
},
{
""identification"": {
""lineItem_latestDate"": ""2013-04-28"",
""lineItem_destination"": ""test"",
""lineItem_quantity"": ""55""
}
}]";
List<RootObject> ob = JsonConvert.DeserializeObject<List<RootObject>>(data);
完成后,現在ob對象根據數據具有值。
Json.Net DOES支持反序列化鍵值配對:您只需要使用Dictionary<string, T>
,其中T
可以是object
, JToken
或其他可以接收數據值的類( string
適用於您的情況)。 使用字典實際上很容易反序列化和迭代值,如下所示:
class Program
{
static void Main(string[] args)
{
string json = @"
{
""identification"": {
""lineItem/latestDate"": ""2013-04-28"",
""lineItem/destination"": ""test"",
""lineItem/quantity"": ""55"",
}
}";
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
foreach (KeyValuePair<string, string> kvp in obj.identification)
{
Console.WriteLine("type: " + kvp.Key);
Console.WriteLine("value: " + kvp.Value);
Console.WriteLine();
}
}
}
class RootObject
{
public Dictionary<string, string> identification { get; set; }
}
輸出:
type: lineItem/latestDate
value: 2013-04-28
type: lineItem/destination
value: test
type: lineItem/quantity
value: 55
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.