2011-06-05 64 views
0

我序列化和反序列化C#中的字典。我的数据结构为:JSON反序列化C#中的嵌套列表#

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; } 
    } 

我序列化对象是Dictionary<string, DataField>()。我做:

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

我得到的字符串是正确的:

{"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":[]}}"; 

当我反序列化,几乎所有的东西是正确的。问题是嵌套列表。虽然他们序列化好,但当我把它放回到一起时,列表是空的。

有什么建议吗?

+1

我该怎么做? – Jeff 2011-06-05 21:15:17

回答

0

我假设你正在使用Json.net 我在工作中遇到同样的问题,列表的反序列化是不完整的。此错误已添加到项目的问题跟踪器中。我们找到的解决方法是不要将列表作为对象中的最后一个变量。

希望这可以帮助您在等待补丁时。

+0

刚刚尝试了这个 - 并没有解决问题。我正在使用System.Web.Script.Serialization; – Jeff 2011-06-06 00:15:24

+0

我切换到json.net并尝试了以上建议与成功! – Jeff 2011-06-06 19:48:44