C# 反序列化JSON忽略包装器
我试图将从REST调用接收到的JSON字符串反序列化为一个名为User的干净C#对象。然而,返回的JSON有很多我希望忽略的“绒毛” 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",
{
"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字符串是不可能的,那么这些根类可能是更好、更安全的解决方案。