使用XmlSerializer序列化C#类时,表示类属性的属性/元素将与源代码中的属性/元素具有相同的名称。
我知道你可以通过这样做来覆盖它:
[XmlAttribute("num")]
public int NumberOfThingsThatAbcXyz { get; set; }
我希望为我的类生成的XML尽可能紧凑,但显然仍然能够在另一端自动反序列化。
有没有办法让这些名称尽可能地缩小,而不必手动考虑并用短字符串注释所有内容?由此产生的XML易于人类阅读并不是一个问题。
答案 0 :(得分:2)
Hmya,请注意这样的微优化。使用现代计算硬件让他们获得回报是非常困难的。处理XML所涉及的I / O的真实成本不是数据量,而是定位数据。字节很便宜,传输它们已经高度优化。它是一个磁盘驱动器读头,可以在某个地方(可能在您自己的机器上)磨掉,它决定了程序的运行速度。一旦它在正确的位置,读取一个字节几乎与读取千字节一样昂贵。记忆的工作方式相同。
最终的提示:如果它是一个常见的优化,他们会提出比IXmlSerializable更好的东西。
答案 1 :(得分:1)
为了通过使用属性来自定义XML序列化,您需要使用类来实现IXmlSerializable接口。
答案 2 :(得分:1)
如果人类可读性不是问题......为什么要使用xml - 也许类似“协议缓冲区”(有C#实现可用)将为您提供所需的互操作性水平这个问题,包括一些自动获取所有属性的方法(如果你有兴趣,我可以多谈谈这个)。
另一种选择是简单地gzip数据;由于所有重复的节点名称,xml拉链令人惊讶。
答案 3 :(得分:1)
属性的本质意味着无法做到这一点。有关原因,请参阅can-attributes-be-added-dynamically-in-c#。即使可以做到,我同意汉斯认为它可能不值得。如果您真的关心这一点,那么您应该遵循Marc的建议之一。