C# 反序列化JSON忽略包装器

C# 反序列化JSON忽略包装器,c#,.net,json,serialization,C#,.net,Json,Serialization,我试图将从REST调用接收到的JSON字符串反序列化为一个名为User的干净C#对象。然而,返回的JSON有很多我希望忽略的“绒毛” JSON字符串如下所示: { "Items": [ { "LoginID": "A", "EmployeeID": "1", "FirstName": "A", "LastName": "A", "MiddleName": "", "PrimaryEmail": "A@1",

我试图将从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的最佳实践和最干净的方法是什么


谢谢

我不确定您是否可以不用NewtonSoft.Json来完成

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

当值可以为空时:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
或始终忽略反序列化:

[JsonIgnore]

对于反序列化,这两个选项将被忽略。

我不想打断您,但您必须进行一些编程才能实现目标。将外部数据映射到内部表示是非常常见的,因此您可能需要这样做。将字符串转换为MemoryStream很简单,所以不要因此而阻止您使用
DataContractSerializer
。因为它将成为一个库,我想把它吸起来,并将所有根对象填充到一个内部类中,这样用户就不会看到这些类。虽然有点脏,所以我希望能想出一个更干净的解决方案。如果不处理JSON字符串是不可能的,那么这些根类可能是更好、更安全的解决方案。