在 C# 中,如何使 XmlSerializer 在序列化期间忽略属性,但在反序列化期间不忽略? (或者我该如何对 Json.net 做同样的事情?)
要防止属性被序列化,您可以添加XmlIgnore
属性:
[XmlIgnore]
public int FooBar {get;set;}
这将导致<FooBar>
序列化期间要省略的标签。
然而,这也意味着<FooBar>
反序列化期间标签将被忽略。
就我而言,我在请求中接受用户发出的一系列项目,并且对于每个项目,如果用户想要添加、修改或删除该项目,则可以指定一个操作属性。我想对 GET 列表调用使用相同的模型对象,并且不想返回此操作属性。我预计这将是一个非常常见的情况。
另一个用例:
假设你有一个圆形物体
public class Circle
{
public double Radius { get; set; }
}
然后修改它以添加直径属性
public class Circle2
{
public double Diameter { get; set; }
public double Radius { get { return Diameter / 2; } set { Diameter = value*2; } }
}
您可能只想序列化直径,但仍然能够以仅包含半径的旧格式反序列化 xml 文件。
我做了我的研究,但没有发现任何东西,因此这个问题
Solution: 我已经找到解决办法了。我可以添加一个 ShouldSerialize 属性,该属性始终返回 false,详细信息位于这个 MSDN 文档 https://learn.microsoft.com/en-us/dotnet/framework/winforms/controls/defining-default-values-with-the-shouldserialize-and-reset-methods
(如果重新打开此问题,则可以添加此解决方案作为实际答案)