[英]Parse JSON to a Dictionary<string, List<string>>
我有一個類似於以下內容的JSON節點。
"folders":[
{"Videos":[1196717,2874999,898084]},
{"Fun":[2443301,3671]},
{"News":[62689,58867,11385]}
]
我想反序列化為Dictionary<string, List<int>>
或類似的東西。 我目前有成員:
[DataMember(Name = "folders")]
public Dictionary<string, List<int>> Folders;
我希望輸出像:
Folders = new Dictionary<string, List<int>>() {
{"Videos", new List<int>() { 1196717, 2874999, 898084 }},
{"Fun", new List<int>() { 2443301, 3671 }},
{"News", new List<int>() { 62689, 58867, 11385 }}
};
我已經將反序列化器實現為:
var serializer = new DataContractJsonSerializer(
typeof(T),
new DataContractJsonSerializerSettings() {
DateTimeFormat = new DateTimeFormat("yyyy-MM-ddTHH:mm:ss.fffffffZ"),
}
);
T result = (T)serializer.ReadObject(response);
但是公正會產生錯誤:
數據協定類型'System.Runtime.Serialization.KeyValue`2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Collections.Generic.List`1 [[System .Int32,mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089]],mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089]]'無法反序列化,因為所需的數據成員'Key,找不到價值。
我了解這是因為它期待更多類似的東西,但是格式超出了我的控制范圍。
"folders":[
{
"key":"Videos",
"value":[1196717,2874999,898084]
},{
"key":"Fun",
"value":[2443301,3671]
},{
"key":"News",
"value":[62689,58867,11385]
}
]
我該怎么做反序列化?
具有:C#
public class wrap
{
public List<Dictionary<string, List<string>>> folders { get; set; }
}
傑森:
{"folders":[
{"Videos":[1196717,2874999,898084]},
{"Fun":[2443301,3671]},
{"News":[62689,58867,11385]}
]
}
使用NewtonJson解串器:
JsonDeserializer.Deserialize<wrap>(JsonInput)
我獲得了3項字典清單的成功對象。
使用DataContractJsonSerializer:
var serialzier = new DataContractJsonSerializer(typeof(wrap));
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonInput));
Result = (wrap)serialzier.ReadObject(stream);
我收到了3項字典列表的不成功對象,但它們為空。 也許DataContractJsonSerializer需要一些調整?
希望能幫助到你。
我為此使用了JavaScriptSerializer
。 基本上,您的json實際上是Dictionary<string, object>
。 我不確定為什么不讓它強制轉換為列表,但是無論如何,這里有幾行簡單的代碼可以幫助您完成任務。
請注意,我將其用作jsonString(即沒有“ video:”部分)
[
{"Videos":[1196717,2874999,898084]},
{"Fun":[2443301,3671]},
{"News":[62689,58867,11385]}
]
如果要在視頻中使用它,則它是字典的另一層,即Dictionary<string, Dictionary<string, object>>
但工作方式相同
碼:
Dictionary<string, List<int>> result = new Dictionary<string, List<int>>();
object[] desirializedJsonObject =(object[])new JavaScriptSerializer().DeserializeObject(jsonString);
foreach (var obj in desirializedJsonObject)
{
// Get the record
var firstRecord = ((Dictionary<string, object>)obj).First();
// Creat list of values
var listOfValues = ((object[])firstRecord.Value).Select(x => Convert.ToInt32(x)).ToList();
result.Add(firstRecord.Key, listOfValues);
}
使用KeyValuePair類代替字典,
List<KeyValuePair<string, List<string>>> uploadedfiles = JsonConvert.DeserializeObject<List<KeyValuePair<string, List<string>>>>(json)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.