In C#, how can I make XmlSerializer ignore a property during serialization but not during deserialization? (Or how do I do the same with Json.net?)
To prevent a property from being serialized, you can add the XmlIgnore
attribute:
[XmlIgnore]
public int FooBar {get;set;}
This will cause the <FooBar>
tag to be omitted during serialization.
However, this also means that the <FooBar>
tag will be ignored during deserialization.
In my case, I accept an array of items from user in the request, and for each item user can specify an action property if they want to add, modify or delete the item. I want to use the same model object for GET list calls, and don't want to return this action property. I expect this would be a pretty common case.
Another use case:
say you have a circle object
public class Circle
{
public double Radius { get; set; }
}
and you modify it to add a diameter property
public class Circle2
{
public double Diameter { get; set; }
public double Radius { get { return Diameter / 2; } set { Diameter = value*2; } }
}
You may want to serialize only the diameter, but still be able to deserialize xml files in the old format that contain only the radius.
I did my research and didn't find anything, hence this question
Solution: I figured out the solution. I can add a ShouldSerialize property which always return false, details at this MSDN documentation
(this solution could be added as an actual answer if this question is reopened)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…