[英]Json.NET C#: JToken.Parent is always null
我正在開發一個Json.NET序列化系統,它嚴重依賴於自定義轉換器,契約解析器和屬性。 該系統旨在處理參考反序列化,包括對訂單不敏感的相互引用和解析。 我沒有使用Json.NET的本機系統,因為我們有特殊要求。
我的當前系統在對象被反序列化時標識對引用的請求。 此引用采用數字ID或人為可讀字符串的形式。 如果引用的請求對象已經被反序列化,則只需從大字典中為需要引用的對象分配其正確的值。 如果不是,則提交“參考請求”。 此請求包含一個對象和一個ID。
當我編寫這個系統時,我沒有意識到更改引用請求中的對象不會自動更改其收件人。 因此,它根本不起作用。
但是,解決這個問題應該非常簡單。 如果我得到一個對象的封裝字段所有者(例如,如果Wine在Dinner中定義,我需要在反序列化期間檢查Wine時檢索Dinner),我可以簡單地使用反射來設置字段。 我基本上存儲了字段地址。 從我收集的內容JToken.Parent
通過JToken.Parent
遍歷Json層次結構應該是完全可能的。 但是,當我嘗試在應該有父對象的對象中訪問此字段時,它為null。 我進行了搜索和搜索,但我沒有發現Parent
是我需要自己設定的東西; 我以為它是由Json.NET內部處理的。 為什么這是空的?
以下是一個例子。 FoodExample包含Food的一個領域,它本身定義了Wine的領域。
public class FoodExample
{
// This meal contains a defined instance of Wine, instead of a reference.
public Food definedMeal = null;
public FoodExample()
{
}
public void Initialise()
{
Food definedMeal = new Food("Steak", new Wine("Pinot Noir", 15.99f));
}
}
當使用我的自定義轉換器反序列化Wine時,我查詢Wine的JToken.Parent
字段,如下所示:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
Debug.Log("Deserialising definition: " + objectType);
// Create a JObject. Use it to get a JReader,
JObject jObject = JObject.Load(reader);
JsonReader jsonReader = jObject.CreateReader();
Debug.Log("Parent: " + (jObject.Parent == null)); // Prints true
}
Json輸出:
{
"definedMeal": {
"ID": 1,
"name": "Steak",
"pairsWellWith": {
"ID": 0,
"price": 15.99,
"name": "Pinot Noir"
}
}
}
當通過我的自定義轉換器傳遞時,此層次結構中兩個對象的父級顯示為null。
值得一提的是,我在Unity3D工作。
引用這個答案:
無法訪問父級,因為父級對象始終在其子級之后創建。 那就是你需要讀取對象所包含的json,以便能夠完全構造對象,當你讀取對象的最后一個括號時,你已經讀過它的所有子節點。 當孩子解析時,沒有父母可以獲得參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.