0

我有一个对象如下,

public class Foo
{
    public Dictionary<string, List<double?>> Bar { get; set; }
}

我序列化使用,string myJson = JsonConvert.Serialize(myFoo)并获得明智的 Json。但是,当我运行时,JsonConvert.Deserialize<Foo>(myJson)我得到一个 ArgumentException Parameter name: value

为什么是这样?

我在 Windows Phone 7.1 项目上使用 Json.Net。

编辑:这是一个示例对象及其产生的 Json,

Foo myFoo = new Foo()
        {
            Bar = new Dictionary<string,List<double?>>() {
                {"Flim", new List<double?>() { 0, 0.2, null, 0.9 }},
                {"Flam", new List<double?>() { 0.0,0.1, null, null}},
            }
        };

序列化后myJson的内容(去掉双引号转义)

{"Bar":{"Flim":[0.0,0.2,null,0.9],"Flam":[0.0,0.1,null,null]}}
4

1 回答 1

0

在标准 Windows 中的 .NET 4.5 上使用 Json.Net 4.5.11 对我来说效果很好。这是我使用的程序(下)。你能尝试在你的环境中运行这个确切的代码,看看它是否有效吗?如果是这样,那么您的 ArgumentException 必须来自其他地方。如果不是,那么这似乎表明 Windows 和 Windows Phone 环境之间存在差异。

class Program
{
    static void Main(string[] args)
    {
        Foo myFoo = new Foo()
        {
            Bar = new Dictionary<string, List<double?>>() 
            {
                { "Flim", new List<double?>() { 0, 0.2, null, 0.9 } },
                { "Flam", new List<double?>() { 0.0, 0.1, null, null } },
            }
        };

        string json = JsonConvert.SerializeObject(myFoo);

        Console.WriteLine(json);

        Foo foo2 = JsonConvert.DeserializeObject<Foo>(json);

        foreach (KeyValuePair<string, List<double?>> kvp in foo2.Bar)
        {
            Console.Write(kvp.Key);
            Console.Write(":");
            string sep = " {";
            foreach (double? d in kvp.Value)
            {
                Console.Write(sep);
                Console.Write(d.HasValue ? d.Value.ToString() : "null");
                sep = ", ";
            }
            Console.WriteLine("}");
        }

    }

    public class Foo
    {
        public Dictionary<string, List<double?>> Bar { get; set; }
    }

}

输出:

{"Bar":{"Flim":[0.0,0.2,null,0.9],"Flam":[0.0,0.1,null,null]}}
Flim: {0, 0.2, null, 0.9}
Flam: {0, 0.1, null, null}
于 2013-05-11T16:51:44.260 回答