简体   繁体   中英

JSON deserialize with nested list in C#

I am serializing and deserializing a Dictionary in C#. My data structure is:

    public class DataField
{
    private string _Name;
    public string Name
    {
        get { return _Name; }
        set
        {
            _Name = value;
        }
    }

    private string _Label;
    public string Label
    {
        get { return _Label; }
        set
        {
            _Label = value;
        }
    }

    private ControlType _TypeOfControl;
    public ControlType TypeOfControl
    {
        get { return _TypeOfControl; }
        set { _TypeOfControl = value; }
    }

    private int _Width;
    public int Width
    {
        get { return _Width; }
        set
        {
            _Width = value;
        }
    }
    private DataType _DataType;
    public DataType DataType
    {
        get { return _DataType; }
        set { _DataType = value; }
    }

    private Control _ControlAccessor;
    public Control ControlAccessor
    {
        get { return _ControlAccessor; }
        set { _ControlAccessor = value; }
    }


    private Type _ControlType;
    public Type ControlType
    {
        get { return _ControlType; }
        set { _ControlType = value; }
    }

    private List<KeyValuePair<string, string>> _Items;
    public List<KeyValuePair<string, string>> Items
    {
        get { if (_Items == null) _Items = new List<KeyValuePair<string, string>>(); return _Items; }
        set { _Items = value; }
    }

The object I am serializing is Dictionary<string, DataField>() . I am doing:

JavaScriptSerializer js = new JavaScriptSerializer();
string str = js.Serialize(ht);`

The string I get is correct:

{"Title" {"Name":"Title","Label":null,"TypeOfControl":0,"Width":200,"DataType":0,"ControlAccessor":null,"ControlType":null,"Items":[]}
,"Price":{"Name":"Price","Label":null,"TypeOfControl":0,"Width":100,"DataType":1,"ControlAccessor":null,"ControlType":null,"Items":[]}
,"Category":{"Name":"Category","Label":null,"TypeOfControl":0,"Width":100,"DataType":1,"ControlAccessor":null,"ControlType":null,"Items":[]}
,"Test":{"Name":"Test","Label":null,"TypeOfControl":0,"Width":100,"DataType":1,"ControlAccessor":null,"ControlType":null,"Items":[]}
,radioGeo":{"Name":"radioGeo","Label":null,"TypeOfControl":3,"Width":0,"DataType":0,"ControlAccessor":null,"ControlType":null
,"Items":[{"Key":"Position","Value":"posit"},{"Key":"Area","Value":"area"},{"Key":"Area","Value":"area"}]}
,"htmled":{"Name":"htmled","Label":null,"TypeOfControl":2,"Width":170,"DataType":0,"ControlAccessor":null,"ControlType":null,"Items":[]}}";

When I deserialize it, ALMOST everything is correct. The problem is the nested lists. While they serialize fine, the list is empty when I put it back to together.

Any suggestions?

I assume you are using Json.net I encouter the same problem at work, the deserialization of the lists was incomplete. This bug has been added to the issue tracker of the project. The workaround we found is to not put the list as the last var in an object.

Hope this can help you while waiting for a patch.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM