Problem with jsonconstructor while deserializing a class
Hello, i am using JsonDotNetForUnity in my project and got into this trouble. I have some data, that need to be serialized, it is kinda complimentary to my gameobject, therefore it is a class, not monobehaviour. The classses are created, loaded into SortedList, then this list is serialized into json. Then we use this list through deserialization. There will be a lot of "strange code", i am sorry in advance, since this is not my first time dealing with this problem. So the class looks like this
[JsonConverter(typeof(StringEnumConverter))]
public enum BodyPartsGroup
{
Head=0,
Front=1,
Back=2,
LeftHand=3,
RightHand=4,
LeftLeg=5,
RightLeg=6,
None=7
}
[JsonConverter(typeof(StringEnumConverter))]
public enum BodyParts
{
Forehead=0,
Neck,
Cheek,
Nose,
Chest,
Belly,
Back,
LeftShoulder,
RightShoulder,
LeftForearm,
RightForearm,
LeftPalm,
RightPalm,
LeftFingers,
RightFingers,
LeftShin,
RightShin,
LeftThigh,
RightThigh,
LeftFoot,
RightFoot,
LeftHeel,
RightHeel,
LeftToes,
RightToes,
Any
}
[JsonObject(MemberSerialization.OptIn)]
public class IllnessInfo
{
[JsonProperty]
public LinkedList<IllnessStep> ListOfStepsToHeal { get; set; }
[JsonProperty]
public string Name { get; private set; }
[JsonProperty]
public string BodyPartName { get; private set; }
[JsonProperty]
public string GroupOfBodyPartsName { get; private set; }
[JsonProperty]
public List<string> IngridientsNeeded { get; set; }
[JsonProperty]
public int LevelOfIllness { get; set; } = 1;
[JsonProperty]
public int DaysToHeal { get; set; }
[JsonConstructor]
public IllnessInfo(string name, LinkedList<IllnessStep> listOfSteps,BodyParts bp,List<string> ingridients, int daysToHeal=1)
{
Name = name;
ListOfStepsToHeal = listOfSteps;
BodyPartName = bp.ToString();
Debug.Log(bp);
GroupOfBodyPartsName = GetBodyPartsGroupName(bp);
IngridientsNeeded = ingridients;
DaysToHeal = daysToHeal;
}
}
Serialization code looks in method looks like this
private static SortedList<string, IllnessInfo> CreateIllnessesInfos()
{
if (File.Exists(IllnessAddress))
{
Dictionary<string, IllnessInfo> dict;
using (StreamReader file = File.OpenText(IllnessAddress))
{
JsonSerializer serializer = new JsonSerializer();
dict = (Dictionary<string, IllnessInfo>)serializer.Deserialize(file, typeof(Dictionary<string, IllnessInfo>));
}
return new SortedList<string, IllnessInfo>(dict);
}
var illnessInfoSortedList = new SortedList<string, IllnessInfo>();
some code not really relevant here
var illinfo = new IllnessInfo("illness", listOfActionsToAdd, BodyParts.LeftFingers, listOfIngridients);
illnessInfoSortedList.Add(illinfo.Name, illinfo);
illinfo = new IllnessInfo("illness Variant", listOfActionsToAdd, BodyParts.RightFingers,
listOfIngridients);
illnessInfoSortedList.Add(illinfo.Name, illinfo);
illinfo = new IllnessInfo("illness Variant 1", listOfActionsToAdd, BodyParts.LeftForearm,
listOfIngridients);
illnessInfoSortedList.Add(illinfo.Name, illinfo);
using (StreamWriter sw = File.CreateText(IllnessAddress))
{
JsonSerializer serializer = new JsonSerializer();
var dct = new Dictionary<string, IllnessInfo>(illnessInfoSortedList);
serializer.Serialize(sw,dct);
}
return illnessInfoSortedList;
}
Everything works, when i am not deserializing from json, when i am deserializing it .... kinda works. The Json constructor is invoked, but all the Properties are set to default. Like i passed Enum of Bodypart, passed LinkedList, after serialization the Bodypart is set to 0 (Forehead) and LinkedList is null. And this is where i am stuck, unforunatelly. I really cant understand, what seem to be problem here.
Your answer
Follow this Question
Related Questions
SimpleJSON doesn't work 1 Answer
Storing levels data 1 Answer
How to read a nested Array Json File in unity 3d? 0 Answers
JsonData to texture? 0 Answers
Argument Exception: J SON must represent an object type. Serialization list of objects 0 Answers