2

我试图避免使用任何第三方 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();

这会抛出一个System.Runtime.Serialization.InvalidDataContractException

无法序列化类型“xxx.xxx.NodeData”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档

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

4

1 回答 1

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

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

于 2013-07-26T20:55:25.397 回答