c# - 不使用属性将对象序列化为 XML

标签 c# xml

是否可以在不指定任何序列化属性的情况下控制 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/

相关文章:

c# - 枚举本地化

c# - 如何检测二值图像RGB中的圆?

xml - XSL : How can I sort a three digit, 连字符分隔值?

Android关于TableLayout和省略号的问题

c# - 按字符串名称在字符串列表中搜索

c# - 无法编译Xamarin UWP应用

c# - Fluent NHibernate - 脱水属性值出错;字典中不存在给定的键

java - JAXB - Beans 到 XSD 还是 XSD 到 beans?

python - DTD 验证失败(Python)

javascript - 解析 xml 以获取要返回给 python 的方程