【问题标题】:Deserialise JSON ignoring wrapper [duplicate]反序列化JSON忽略包装器[重复]
【发布时间】:2016-04-18 15:12:33
【问题描述】:

我正在尝试将从 REST 调用接收到的 JSON 字符串反序列化为一个名为 User 的干净 C# 对象。但是,返回的 JSON 有很多我希望忽略的“绒毛”。

JSON字符串如下:

{
  "Items": [
    {
      "LoginID": "A",
      "EmployeeID": "1",
      "FirstName": "A",
      "LastName": "A",
      "MiddleName": "",
      "PrimaryEmail": "A@1",
      "Active": true,
      "CellPhoneNumber": null,
      "OrganizationUnit": null,
      "ID": null,
      "URI": null
    },
    {
      "LoginID": "B",
      "EmployeeID": "2",
      "FirstName": "B",
      "LastName": "B",
      "MiddleName": "",
      "PrimaryEmail": "B@2",
      "Active": true,
      "CellPhoneNumber": null,
      "OrganizationUnit": null,
      "ID": null,
      "URI": null
    }
  ],
  "NextPage": null
}

我希望将其转换为用户对象数组,定义为:

[DataContract]
    public class User
    {
        [DataMember]
        public string LoginID { get; set; }
        [DataMember]
        public string EmployeeID { get; set; }
        [DataMember]
        public string FirstName { get; set; }
        [DataMember]
        public string LastName { get; set; }
        [DataMember]
        public string MiddleName { get; set; }
        [DataMember]
        public string PrimaryEmail { get; set; }
        [DataMember]
        public bool Active { get; set; }
        [DataMember]
        public object CellPhoneNumber { get; set; }
        [DataMember]
        public object OrganizationUnit { get; set; }
        [DataMember]
        public object ID { get; set; }
        [DataMember]
        public object URI { get; set; }
    }

我试图避免使用 Newtonsoft.Json,因为我想创建尽可能少的依赖项。

使用标准DataContractJsonSerializer 将不起作用,因为它使用返回的数据流。我想避免创建一个类只是为了让 JSON 适合我的类结构并且从不使用它,特别是如果这些类暴露给代码的用户。

简而言之,我可以在没有 Newtonsoft.Json 的情况下仅反序列化 JSON 字符串的特定部分吗?如果不是,反序列化 JSON 的最佳实践和最干净的方法是什么?

谢谢

【问题讨论】:

  • 我不想告诉你,但你将不得不做一些编程来实现你的目标。从外部数据到内部表示的映射器非常常见,因此您可能需要这样做。将字符串转换为 MemoryStream 是微不足道的,所以不要让它阻止您使用DataContractSerializer
  • 因为它将成为一个库,我正在考虑将其吸收并将所有根对象填充到一个内部类中,这样用户就不会看到这些类。虽然有点脏,所以我希望能提出一个更清洁的解决方案。如果不摆弄 JSON 字符串就无法实现,那么这些根类可能是更好、更安全的解决方案。

标签: c# .net json serialization


【解决方案1】:

我不确定你是否可以在不使用 NewtonSoft.Json 的情况下做到这一点。

对于您向我们展示的案例,我通常使用其中一种选项。

当值可以为空时:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

或总是忽略反序列化:

[JsonIgnore]

这两个选项将忽略反序列化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2017-02-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多