JavaScriptSerializer在c#中为嵌套对象序列化

时间:2015-01-14 16:15:39

标签: c# .net json

我为多级菜单创建了课程。它运作良好。但现在我希望Menu类转换为JSON对象以便在angularjs中使用。

我有二级课

class Menu
{
    private List<Item> Items = new List<Item>();
}

class Item
{
    public int Id { get; set; }
    public int Level { get; set; }
    public string Title { get; set; }
    public string NavigateUrl { get; set; }
    public Menu Child { get; set; }
}`

我需要创建Menu的JSON对象,其中Menu类包含Item的List,Item类包含Menu。

JavaScriptSerializer.Serialize仅使用一个级别。 我是否必须实现任何类型的接口或更改可能进行序列化的类?

2 个答案:

答案 0 :(得分:2)

您的主要问题似乎是您的Menu类有一个内部私有变量,其中包含Item对象列表,并且该列表无法通过外部代码访问。

Javascript序列化程序只能序列化类的公共属性。

如果您使用属性获取器公开访问您的菜单项,请执行以下操作:

class Menu
{
    private List<Item> _items = new List<Item>();

    public List<Item> Items
    {
        get { return _items; }
        set { _items = value; }
    }
}

它应该有用。

您的Item课程已由公共媒体资源组成,因此应该顺序排列。

答案 1 :(得分:0)

如果我理解你的问题,你需要做下一步:

[DataContract]
public class Menu
{
    [DataMember]
    private List<Item> Items = new List<Item>();
}

[DataContract]
public class Item
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public int Level { get; set; }

    [DataMember]
    public string Title { get; set; }

    [DataMember]
    public string NavigateUrl { get; set; }

    [DataMember]
    public Menu Child { get; set; }
}

之后你可以使用:

var menu = new Menu(); 
/* add items */ 
var serializer = new JavaScriptSerializer(); 
var serializedResult = serializer.Serialize(menu);

如果我在某处错了,请纠正我