Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by ViktorLanin · Nov 06, 2021 at 01:12 PM · scripting problemjsondeserialization

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.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

273 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges