c#中嵌套对象的JavaScriptSerializer序列化

JavaScriptSerializer Serialize for Nested Object in c#

我已经为多级菜单创建了 class。它运作良好。但是现在我希望 Menu class 转换为 JSON 对象以便在 angularjs.

中使用

我有class两个class

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

我需要创建 JSON 菜单对象,其中菜单 class 包含项目列表,项目 class 包含菜单。

JavaScriptSerializer.Serialize 只用一层。 我是否必须实现任何类型的接口或更改可以序列化的 class?

您的主要问题似乎是您的 Menu class 有一个内部私有变量,用于保存 Item 对象的列表,并且外部代码无法访问该列表。

Javascript 序列化程序只能序列化 class 上的 public 属性。

如果您使用 属性 getter 使您的菜单项 public 易于访问...像这样:

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

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

应该可以。

您的 Item class 已经由 public 个属性组成,因此应该可以毫无问题地进行序列化。

如果我理解你的问题,你接下来需要做的是:

[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);

如有错误请指正