У меня есть класс, который я использую для конфигурации, которая содержит 3 кортежа всех целых чисел.Проблемы десериализации Json с кортежами?
public class Configuration
{
public List<Tuple<int, int, int>> MyThreeTuple { get; set; }
public Configuration()
{
MyThreeTuple = new List<Tuple<int, int, int>>();
MyThreeTuple.Add(new Tuple<int, int, int>(-100, 20, 501));
MyThreeTuple.Add(new Tuple<int, int, int>(100, 20, 864));
MyThreeTuple.Add(new Tuple<int, int, int>(500, 20, 1286));
}
}
Этот класс сериализовать в Json с System.Web.Script.Serialization
как таковой
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
String configJson = jsonSerializer.Serialize(config);
File.WriteAllText(configPath, configJson);
, а затем десериализации при запуске приложения
String configJson = File.ReadAllText(configPath);
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
object jsonObject = jsonSerializer.Deserialize(configJson, typeof(ApplicationConfiguration));
appConfig = (Configuration)jsonObject;
Моя проблема заключается в том, что всякий раз, когда я иду в десериализации JSon исключено исключение
System.MissingMethodException in System.Web.Extensions.dll
С сообщением
No parameterless constructor defined for type of `System.Tuple`3 ....
Это то, что производится Json для кортежа выглядит
"MyThreeTuple":
[
{"Item1":-100,"Item2":20,"Item3":501},
{"Item1":100,"Item2":20,"Item3":864},
{"Item1":500,"Item2":20,"Item3":1286}
]
Любая идея, как решить эту проблему?
EDIT:
Как другие предположили, я опробовал JSon.NET и, кажется, работает десериализации JSON. Хотя я нашел странную причуду.
Таким образом, конструктор для моего класса Configuration
заполняет значения по умолчанию для конфигурации. В частности, что указано в коде выше. Я обнаружил, что могу сериализовать конфигурацию с разными значениями, но при десериализации значения по умолчанию также загружаются в List<Tuple<>>
.
Я предполагаю, что Json.Net обошел проблему Tuple
, не имея конструктора без параметров, сначала создавая экземпляр Configuration
, а затем устанавливая его значения.
Кажется, что создается экземпляр класса, затем List.Add
ing Tuple
s он находит в json список. Вместо того, чтобы очищать список, добавляя то, что он находит.
Есть ли возможность в JSon.Net решить эту проблему?
Systen.Tuple не делает имеют безпараметрический конструктор. – MajkeloDev
http://stackoverflow.com/questions/13739348/why-i-could-not-serialize-a-tuple-in-c прочитать это Вопрос и ответы – MajkeloDev
Если вы хотите использовать JSON.net, он [поддерживает Tuple сериализация] (http://stackoverflow.com/questions/16101115/how-does-a-tuple-serialize-to-and-deserialize-from-json). –