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

C# 如何使用System.Runtime.Serialization.Json序列化对象列表?,c#,json,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 parentI

我试图避免使用任何第三方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;
  }
}
然后我使用
DataContractJsonSerializer
将构建的
NodeData
对象列表转换为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();
MemoryStream ms=newmemoryStream();
DataContractJsonSerializer ds=新的DataContractJsonSerializer(类型(列表));
ds.WriteObject(ms,数据);
字符串jsonString=Encoding.UTF8.GetString(ms.ToArray());
Close女士();
这将抛出一个
System.Runtime.Serialization.InvalidDataContractException

无法序列化类型“xxx.xxx.NodeData”。考虑标记它 使用DataContractAttribute属性,并标记其所有 要使用DataMemberAttribute属性序列化的成员。 如果类型是集合,请考虑将其标记为 CollectionDataContractAttribute。请参阅Microsoft.NET Framework 其他受支持类型的文档


如何使我的列表对System.Runtime.serialization.JSON的JSON序列化有效?

如错误消息所述,添加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;
  }
}
这些属性有助于框架了解如何序列化对象