[英]Make serialized JSON from C# null class instance return empty array
給定以下簡單的類:
public class Person
{
public int id { get; set; }
public List<Order> orders { get; set; }
}
當orders
屬性為null,並且使用以下JSON.NET
對Person
實例進行序列化后:
var json = JsonConvert.SerializeObject(myPerson);
當orders = null
時,我需要返回的物理輸出(這是一個現有約束),如下所示:
{
"id": 1,
"orders": []
}
但是,正在發生的情況是orders
屬性返回的所有空值如下所示:
{
"id": 1,
"orders": [
{
"id": null,
"total":null,
"orderDate":null,
"itemQuantity":null
}
]
}
如果為null
,則無法返回該集合,而是需要將其顯示為基本上為空的數組,例如: "orders": []"
我試過了:
myPerson.orders = null;
但是,這仍然會產生完整的對象集合,並顯示所有空值。
我該如何干預此對象的序列化或操作,以使它以物理形式返回為空數組,而不是擴展的null字段集合?
編輯:部分問題通過評論得到了回答。 返回的完整對象實例是由於LINQ查詢返回了實例化默認orders
實例的結果集。 但是,問題的主要部分仍然是使它返回"orders":[]
而不是 "orders":null
"orders": [
{
"id": null,
"total":null,
"orderDate":null,
"itemQuantity":null
}
]
您在上面看到的輸出不能由人員的空orders
屬性引起。 JSON數組確實有一個項目,因此訂單列表中也需要有一個項目。 它恰好具有其所有屬性的默認值,這就是為什么每個鍵都為null
原因。
因此,如果您確定在哪里創建了空的Order
對象並將其添加到列表中,則可以擺脫該輸出。
至於序列化一個空列表,你有兩個選擇:你可以把它序列化的null
通過設置屬性為null
直接( person.orders = null
)。 或者,您可以通過為屬性分配一個空列表( person.orders = new List<Order>()
)將其序列化為一個空數組[]
。
您也可以操縱序列化程序以始終創建一個空數組,即使該屬性為null
。 有關示例,請參見此答案 。
您可以在類構造函數中初始化集合,然后將獲得所需的輸出:
public class Person
{
public Person()
{
orders = new List<Order>();
}
public int id { get; set; }
public List<Order> orders { get; set; }
}
另外,您可以為您的財產個性化吸氣劑,但我個人不建議這樣做,因為在出現錯誤的情況下很難找到它。
public class Person
{
public int id { get; set; }
private List<Order> _orders;
public List<Order> orders
{
get
{
if (_orders == null)
{
_orders = new List<Order>();
}
return _orders;
}
set { _orders = value; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.