skip to Main Content

I am using System.Text.Json to deserialize objects from an external API call in C#. I have created the classes for the data and is very straight-forward.

    public class DocumentListRoot
    {
        public List<LevelDocumentList> LevelDocumentList { get; set; }
        public string FileNumber { get; set; }
        ... more properties
    }

    public class LevelDocumentList
    {
        public string FolderName { get; set; }
        public string FolderAutomationId { get; set; }
        public string DocumentTypeName { get; set; }
        public List<Attribute> Attributes { get; set; }
        ... more properties
    }

    public class Attribute
    {
        public string name { get; set; }
        public string value { get; set; }
    }

The default name for DocumentListRoot was Root and I changed that with no issues. What I would like to do is to change the name of LevelDocumentList to a different name. I have seen several posts here but they are pertaining to changing attribute names, not class names. I did try parsing the JSON string and renaming the class there, and it works, but that seems like a hack.
I would like to know if there is a way while deserializing, to change the names of the classes.

Thank you

2

Answers


  1. Chosen as BEST ANSWER

    I used @gunr2171's suggestion

        public class DocumentListRoot
        {
            public List<MyNewName> LevelDocumentList { get; set; } //This property name **had** to stay the same.  Now a list of the class with my new name.
            public string FileNumber { get; set; }
            ... more properties
        }
    
        public class MyNewName
        {
            public string FolderName { get; set; }
            public string FolderAutomationId { get; set; }
            public string DocumentTypeName { get; set; }
            public List<Attribute> Attributes { get; set; }
            ... more properties
        }
    

  2. Then you can change your class name as you need. Since deserialization
    only cares about names of properties as @ gunr2171 said. You can
    change your class name accordingly as well as work around but not a
    hacky way of doing it.

    Refer to the code below:

    public class DocumentListRoot
    {        
        public List<MyLevelDocumentList> LevelDocumentList { get; set; }  // New class name
        public string FileNumber { get; set; }
        // other remaining properties
    }
    
    public class MyLevelDocumentList // New class name
    {
        public string FolderName { get; set; }
        public string FolderAutomationId { get; set; }
        public string DocumentTypeName { get; set; }
        public List<MyAttribute> Attributes { get; set; } // refer the new class name 
        // define other properties as usual 
    }
    
    public class MyAttribute // New class you want
    {
        public string name { get; set; }
        public string value { get; set; }
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search