Tôi có danh sách liên kết kép mà tôi đang cố gắng deserialise.JSON .Net không tôn trọng PreserveReferencesHandling on Deserialization
kịch bản của tôi liên quan chặt chẽ với SO này: Doubly Linked List to JSON
tôi có các thiết lập JSON sau:
_jsonSettings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Auto,
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ObjectCreationHandling = ObjectCreationHandling.Auto
};
Khi tôi nhìn vào đầu ra tuần tự, nó xuất hiện đúng, và tài liệu tham khảo giữa các nút là đúng đại diện.
Khi dữ liệu được deserialised, các thuộc tính cha mẹ trong các đối tượng con là null, mặc dù chúng được điền với $ ref một cách chính xác.
Dưới đây là một mẫu của các JSON (tỉa để có thể đọc)
Trong quá trình gõ câu hỏi này - tôi có thể đã thấy nguồn gốc của những rắc rối ...
Các đối tượng trong "Trẻ em "thuộc tính mảng không có thuộc tính type $.
này có thể là do trẻ em và tài sản Chánh là của chung loại T.
Lưu ý rằng các loại thực tế được đăng là một lớp dẫn xuất của TemplateDataLinkedListBase
public class TemplateDataQueryElement : TemplateDataLinkedListBase<TemplateDataQueryElement>
Dưới đây là một đoạn trích của các cơ sở lớp học:
public class TemplateDataLinkedListBase<T> where T : TemplateDataLinkedListBase<T>
{
[JsonProperty(TypeNameHandling = TypeNameHandling.Objects)]
public T Parent { get; set; }
[JsonProperty(TypeNameHandling=TypeNameHandling.Objects)]
public List<T> Children { get; set; }
}
Làm thế nào tôi có thể deserialise JSON này theo cách mà thuộc tính Parent không rỗng và chứa tham chiếu đến thứ e đối tượng cha mẹ?
{
"$id": "9",
"$type": "Contracts.Models.TemplateDataQueryElement, Contracts",
"Query": null,
"Parent": null,
"Children": [
{
"$id": "11",
"Query": null,
"Parent": {
"$ref": "9"
},
"Children": [
{
"$id": "13",
"Query": null,
"Parent": {
"$ref": "11"
},
"Children": [],
"EntityName": "Widgets",
"Fields": [
"Id"
],
"Key": ""
},
Dưới đây là Pastebin liên kết đến các mã có liên quan:
http://pastebin.com/i1jxVGG3 http://pastebin.com/T1xqEWW2 http://pastebin.com/ha42SeF7 http://pastebin.com/cezwZqx6 http://pastebin.com/uFbTbUZe http://pastebin.com/sRhNQgzh
Bạn có thể đăng định nghĩa toàn bộ lớp học để hiểu rõ hơn về những gì đang diễn ra không? –
Và cũng là một ví dụ về cách bạn đang thực hiện tuần tự hóa và deserialization? –
Xin chào @IlijaDimov Tôi đã bao gồm các liên kết đến mã nguồn – RobD