Rya*_*ins 6 .net c# serialization json
我已经看到很多例子似乎表明我正在做的事情应该有效,但无论出于何种原因,它都没有.我正在尝试反序列化一组对象,其中一个属性是Dictionary,如下所示:
class Program
{
static void Main(string[] args)
{
var json = "{\"Collection\":[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]}";
//var json = "[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]";
List<MyObject> myObjects = new JavaScriptSerializer().Deserialize<List<MyObject>>(json);
}
}
[DataContract]
public class MyObject
{
[DataMember]
public string ID { get; set; }
[DataMember]
public Dictionary<string, string> Dictionary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
第一个json字符串将整个事物封装在一个对象中 - 如果我运行它,它运行正常,但myObjects只是一个空列表.如果我运行第二个字符串(没有它被包装)我得到以下错误:
键入'System.Collections.Generic.Dictionary`2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral ,对于数组的反序列化,不支持PublicKeyToken = b77a5c561934e089]]'.
从我做过的研究看来,这应该是非常直接的 - 任何人都有任何关于我应该使用哪种JSON格式以及出了什么问题的想法?如果我只做一个对象而不是一个对象数组,JSON反序列化就好了.
小智 4
是的,确实,反序列化器不会反序列化字典对象,特别是如果您有任何复杂的类型和日期。解决方案是使用 Newtonsoft.Json 使用 Jobject 进行反序列化,您可以以此为例并尝试。在您的情况下,您可以将其带到 var 或 Jobject
JArray resources=(JArray)JsonConvert.DeserializeObject(objJson);
itemStores = resources.Select(resource => new Resource`enter code here`
{
SpaceUsed = long.Parse(resource["indexDiskMB"].ToString()),
ItemId =resource["id"].ToString(),
CountItems =Int32.Parse(resource["numItems"].ToString()),
ItemType=resource["type"].ToString()
}).ToList();
Run Code Online (Sandbox Code Playgroud)