如何使用System.Runtime.Serialization.Json序列化对象列表?

时间:2013-07-26 20:50:27

标签: c# json

我试图避免使用任何第三方DLL将某些数据转换为JSON。

说我有班级:

public class NodeData {

  public int NodeID { get; set; }
  public int ParentID { get; set; }
  public int Index { get; set; }
  public string FriendlyName { get; set; }

  public NodeData(int nodeID, int parentID, int index, string friendlyName) {
    this.NodeID = nodeID;
    this.ParentID = parentID;
    this.Index = index;
    this.FriendlyName = friendlyName;
  }
}

然后我使用DataContractJsonSerializerNodeData个对象的构造列表转换为JSON字符串,如下所示:

MemoryStream ms = new MemoryStream();
DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(List<NodeData>));
ds.WriteObject(ms, data);

string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();

这会引发System.Runtime.Serialization.InvalidDataContractException

  

键入&#39; xxx.xxx.NodeData&#39;无法序列化。考虑标记它   使用DataContractAttribute属性,并标记其所有内容   要使用DataMemberAttribute属性序列化的成员。   如果类型是集合,请考虑使用   CollectionDataContractAttribute。请参阅Microsoft .NET Framework   其他支持类型的文档

如何使我的列表对于使用System.Runtime.Serialization.Json序列化为JSON有效?

1 个答案:

答案 0 :(得分:3)

如错误消息所示,添加DataContract和DataMethod属性。

[DataContract]  
public class NodeData {
  [DataMember]
  public int NodeID { get; set; }
  [DataMember]
  public int ParentID { get; set; }
  [DataMember]
  public int Index { get; set; }
  [DataMember]
  public string FriendlyName { get; set; }

  public NodeData(int nodeID, int parentID, int index, string friendlyName) {
    this.NodeID = nodeID;
    this.ParentID = parentID;
    this.Index = index;
    this.FriendlyName = friendlyName;
  }
}

这些属性有助于框架知道如何序列化对象。