2013-05-10 62 views
0

反序列化時,我有一個對象,如下所示,的ArgumentException使用JSON.Net

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

請出示你試圖反序列化JSON的。 – 2013-05-10 16:00:28

+0

製作'列表'不可空的作品,即'列表' - 它看起來像是空值導致了問題。不幸的是,我需要這是可空的... – Brendan 2013-05-10 22:01:17

回答

0

它使用JSON的工作對我很好.Net 4.5.11在標準Windows中使用.NET 4.5。這是我使用的程序(下面)。你可以嘗試在你的環境中運行這個確切的代碼,看看它是否工作?如果是這樣,那麼你的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} 
+0

我創建了一個全新的項目,並通過NuGet提供了最新的JSON(5.0.5)。我將代碼複製到一個按鈕回調中。 'Console.WriteLine'行被註釋掉了,因爲他們在Windows Phone項目中不做任何AFAIK。我得到了相同的參數異常 - 這是由於JSON.Net版本或Windows Phone環境的差異造成的...... – Brendan 2013-05-12 00:25:02

+0

不幸的是,我不是Windows Phone大師。我下載了Windows Phone 7.1 SDK,並試圖設置一個「Hello World」應用程序,以便我可以嘗試在與您相同的環境中重現問題,但是我只是在測試中獲得一個簡單的按鈕單擊以工作項目!當我有更多的時間,也許在週末時,我會嘗試更多地使用它。 – 2013-05-15 18:48:29