【问题标题】:How do I serialize a list of objects with System.Runtime.Serialization.Json?如何使用 System.Runtime.Serialization.Json 序列化对象列表?
【发布时间】:2013-07-26 20:50:27
【问题描述】:

我试图避免使用任何第三方 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 属性序列化的成员。 如果类型是一个集合,考虑用 集合数据合同属性。请参阅 Microsoft .NET 框架 其他支持类型的文档

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

【问题讨论】:

    标签: c# json


    【解决方案1】:

    如错误消息所述,添加 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;
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多