我有一个如下对象,
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]}}
答案 0 :(得分: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}