Nei*_*l N 5 c# serialization json.net deserialization
我有一个带有内部列表的类。我不希望这个类的用户能够直接与列表交互,因为我希望在返回它之前保持它的排序并运行一个计算(这取决于顺序)。
我暴露
AddItem(Item x)
Run Code Online (Sandbox Code Playgroud)
和一个
IEnumerable<Item> Items
{
get { // returns a projection of internal list }
}
Run Code Online (Sandbox Code Playgroud)
序列化工作正常,但反序列化使列表为空。我想这是因为我没有二传手。所以我添加了一个允许你设置列表的,但前提是内部列表为空。但这并没有解决问题,事实证明 NewtonSoft 没有调用 setter,它只调用 getter 来获取列表,然后将每个项目添加到其中,因为我的 getter 返回了一个投影列表,所以这些项目被添加反序列化完成后立即处理的对象。
我如何保持对我的列表的只读访问,同时允许一些简单的反序列化?
对我有用的是以下内容:
[JsonProperty(PropertyName = "TargetName")]
private List<SomeClass> _SomeClassList { get; set; }
public IReadOnlyList<SomeClass> SomeClassList
{
get
{
return this._SomeClassList.AsReadOnly();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,创建一个函数来阻止SomeClassList被序列化:
public bool ShouldSerializeSomeClassList() { return false; }
Run Code Online (Sandbox Code Playgroud)
请参阅https://www.newtonsoft.com/json/help/html/ConditionalProperties.htm(感谢 Peska)