我有一个类似于以下内容的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,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'无法反序列化,因为所需的数据成员找不到“关键,价值”。
我理解这是因为它期待更像这样的东西,但格式不受我的控制。
"folders":[
{
"key":"Videos",
"value":[1196717,2874999,898084]
},{
"key":"Fun",
"value":[2443301,3671]
},{
"key":"News",
"value":[62689,58867,11385]
}
]
我可以做些什么来反序化呢?
答案 0 :(得分:1)
有: C#
public class wrap
{
public List<Dictionary<string, List<string>>> folders { get; set; }
}
JSON:
{"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需要一些调整?
希望它有所帮助。
答案 1 :(得分:0)
我使用了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);
}
答案 2 :(得分:0)
使用KeyValuePair类代替字典,
List<KeyValuePair<string, List<string>>> uploadedfiles =
JsonConvert.DeserializeObject<List<KeyValuePair<string, List<string>>>>(json)