Json.NET 当只读 属性 与 object 引用一起使用时失败?
Json.NET failing when readonly property is used with object references?
编辑 2016-12-05:
这被认为是一个错误并已修复:Readonly property corrupts normal property object references. #486
原post:
我刚开始使用 Json.NET,但遇到了一些看起来像是错误的奇怪行为。
如果反序列化器遇到最初在只读属性(get; only)中定义的object引用(“$ref”:“2”),它无法反序列化并且returns 改为 null。
Class
public class Parent
{
public Child ReadOnlyChild
{
get
{
return Child;
}
}
public Child Child {get; set;}
}
public class Child
{
}
序列化:
Parent p = new Parent() { Child = new Child() };
JsonConvert.SerializeObject(p, new JsonSerializerSettings()
{ Formatting = Formatting.Indented,
PreserveReferencesHandling = PreserveReferencesHandling.Objects });
已连载:
{
"$id": "1",
"ReadOnlyChild": {
"$id": "2",
},
"Child": {
"$ref": "2"
}
}
反序列化(并重新序列化以显示更改):
{
"$id": "1",
"ReadOnlyChild": null,
"Child": null
}
这是预期的行为、错误,还是我遗漏了什么?
请注意,有时需要 [JsonProperty(Order = #)] 来强制序列化程序首先作用于 ReadOnlyChild。无论如何,上面的序列化 JSON 块将无法正确反序列化,即使 class 已被修改为先反序列化 Child。
编辑:我担心 Child 属性 被取消,而不是 ReadOnlyChild 被 Json.NET[=45 以某种方式赋值=]
谢谢!
您是否考虑过阻止 属性 被 Json.Net 序列化?
public class Parent
{
[JsonIgnore]
public Child ReadOnlyChild
{
get
{
return Child;
}
}
public Child Child {get; set;}
}
编辑 2016-12-05: 这被认为是一个错误并已修复:Readonly property corrupts normal property object references. #486
原post:
我刚开始使用 Json.NET,但遇到了一些看起来像是错误的奇怪行为。
如果反序列化器遇到最初在只读属性(get; only)中定义的object引用(“$ref”:“2”),它无法反序列化并且returns 改为 null。
Class
public class Parent
{
public Child ReadOnlyChild
{
get
{
return Child;
}
}
public Child Child {get; set;}
}
public class Child
{
}
序列化:
Parent p = new Parent() { Child = new Child() };
JsonConvert.SerializeObject(p, new JsonSerializerSettings()
{ Formatting = Formatting.Indented,
PreserveReferencesHandling = PreserveReferencesHandling.Objects });
已连载:
{
"$id": "1",
"ReadOnlyChild": {
"$id": "2",
},
"Child": {
"$ref": "2"
}
}
反序列化(并重新序列化以显示更改):
{
"$id": "1",
"ReadOnlyChild": null,
"Child": null
}
这是预期的行为、错误,还是我遗漏了什么?
请注意,有时需要 [JsonProperty(Order = #)] 来强制序列化程序首先作用于 ReadOnlyChild。无论如何,上面的序列化 JSON 块将无法正确反序列化,即使 class 已被修改为先反序列化 Child。
编辑:我担心 Child 属性 被取消,而不是 ReadOnlyChild 被 Json.NET[=45 以某种方式赋值=]
谢谢!
您是否考虑过阻止 属性 被 Json.Net 序列化?
public class Parent
{
[JsonIgnore]
public Child ReadOnlyChild
{
get
{
return Child;
}
}
public Child Child {get; set;}
}