I have a class I use for configuration that holds a 3 tuple of all integers.
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));
}
}
This class is serialized into Json with System.Web.Script.Serialization as such
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
String configJson = jsonSerializer.Serialize(config);
File.WriteAllText(configPath, configJson);
and then deserialized when the application is launched
String configJson = File.ReadAllText(configPath);
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
object jsonObject = jsonSerializer.Deserialize(configJson, typeof(ApplicationConfiguration));
appConfig = (Configuration)jsonObject;
My issue is that whenever I go to deserialize the Json an exception is thrown
System.MissingMethodException in System.Web.Extensions.dll
With the message
No parameterless constructor defined for type of `System.Tuple`3 ....
This is what the produced Json for the tuple looks like
"MyThreeTuple":
[
{"Item1":-100,"Item2":20,"Item3":501},
{"Item1":100,"Item2":20,"Item3":864},
{"Item1":500,"Item2":20,"Item3":1286}
]
Any idea how to solve this problem?
EDIT:
As other have suggested I tried out JSon.NET and it seems to work to deserialize the json. Though I have found an odd quirk.
So the constructor for my Configuration class fills in default values for the configuration. Specifically what is given in the code above. I have found that I can serialize the configuration with different values, but when deserialized, the default values are also loaded to the List<Tuple<>>.
I assume the Json.Net gets around the issue of Tuple not having a parameterless constructor by first instantiating Configuration and then setting its values.
It seems to be instantiating the class, then List.Adding the Tuples it finds in the json to the list. Instead of clearing the list then adding what it finds.
Is there an option in JSon.Net to solve this issue?