【发布时间】:2019-07-25 08:33:38
【问题描述】:
在以下示例中,foo 和 deserializedFoo 变量都具有完全填充的 Values 属性。为 [JsonConstructor] 属性赋予了一个私有的无操作构造函数,以避免来自公共构造函数的构造函数值映射。
尽管如此,如果 JSON.NET 在构造期间将其支持字段分配给一个空列表,它似乎能够设置 get-only 属性的值。
我在 JSON.NET 文档中找不到任何提及此行为的内容。谁能解释这种行为?
void Main()
{
var foo = new Foo(new [] { "One", "Two", "Three" });
var json = JsonConvert.SerializeObject(foo);
var deserializedFoo = JsonConvert.DeserializeObject<Foo>(json);
}
class Foo
{
private readonly List<string> _values;
public Foo(IEnumerable<string> values)
{
_values = values.ToList();
}
[JsonConstructor]
private Foo()
{
_values = new List<string>();
}
public IEnumerable<string> Values => _values;
}
【问题讨论】:
-
我猜它是通过反射魔法完成的......
-
我想你可以在 here 的某个地方找到它,虽然我不太清楚如何/在哪里 :)
-
您期望在这里发生什么?