【发布时间】: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