是否可以在不指定任何序列化属性的情况下控制 XmlSerializer
/DataContractSerializer
行为?
更具体地说,我想控制序列化(XmlIgnore
、自定义属性名称等),但不装饰我的属性。
用例:
- 一个大型的现有类,我不希望它被序列化属性污染
- 序列化没有可用源代码的类
- 在不更改类代码的情况下从使用
XmlSerializer
切换到DataContractSerializer
到 JSON
例如,我将如何在不取消注释属性的情况下序列化以下内容:
// [Serializable]
public MyClass
{
// [XmlIgnore] - The following property should not be serialized, without uncommenting this line
public int DontSerializeMeEvenThoughImPublic { get; set; }
// [XmlAttribute("another_name")] - should be serialized as 'another_name', not 'SerializeMeAsXmlAttribute'
public double SerializeMeAsXmlAttribute { get; set; }
// [DataMember] - should be included
private string IWantToBeSerializedButDontDecorateMeWithDataMember { get; set; }
}
最佳答案
你不能(优雅地做)。
修改 XmlSerializer
序列化类的方式的唯一方法是使用属性(顺便说一下,SerializableAttribute
不是必需的)。 DataContractSerializer
更糟。
一种可能的解决方案是为 XML 序列化/反序列化创建中间类并使用 Automapper在“真实”类和中介之间复制数据。 我使用这种方法将前端 XML 序列化问题排除在我的业务逻辑数据类型之外。
关于c# - 不使用属性将对象序列化为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25848032/