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);
如有错误请指正
我已经为多级菜单创建了 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);
如有错误请指正