2013-05-10 4 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.

Почему это?

Я использую Json.Net в проекте Windows Phone 7.1.

Edit: Вот пример объекта и 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 вы пытаетесь десериализации. –

+0

Выполнение 'List ' не-nullable works i.e. 'List ' - похоже, что нули приводят к проблеме. К сожалению, мне нужно, чтобы это было нулевым ... – Brendan

ответ

0

Он работал хорошо для меня, используя JSon .Net 4.5.11 на .NET 4.5 в стандартной Windows. Вот программа, которую я использовал (ниже). Можете ли вы попробовать запустить этот точный код в своей среде и посмотреть, работает ли он? Если это так, то ваше 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

Я создал совершенно новый проект и включил новейший JSON (5.0.5), доступный через NuGet. Я скопировал код в обратный вызов. Линии Console.WriteLine были закомментированы, поскольку они не делают ничего AFAIK в проекте Windows Phone. У меня такое же исключение аргументов - это либо из-за разницы в версиях JSON.Net, либо в среде Windows Phone ... – Brendan

+0

Я, к сожалению, не являюсь гуру Windows Phone. Я загрузил SDK Windows Phone 7.1 и попытался настроить приложение «Hello World», чтобы попытаться воспроизвести проблему в той же среде, что и вы, но у меня возникли проблемы с простое нажатие кнопки для работы в моем тесте проект! Я попытаюсь сыграть с ним больше, когда у меня будет больше времени, возможно, в выходные. –

Смежные вопросы