在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 文件,其中只包含半径。
我做了研究,没有找到任何东西,因此提出这个问题
解决方案:我找到了解决方案。我可以添加一个应该始终返回 false 的 ShouldSerialize 属性,详细信息请参见此 MSDN 文档
(如果重新打开此问题,此解决方案可以作为实际答案添加)