2010-04-24 55 views
2

时当序列化使用XmlSerializer的,属性的C#类/代表类的属性元件将它们在源代码中做有相同的名称。自动缩小文件属性/元素名称使用的XmlSerializer

我知道你可以做像这样覆盖此:

[XmlAttribute("num")] 
public int NumberOfThingsThatAbcXyz { get; set; } 

我想生成的XML我的班是尽可能紧凑,但显然仍能够对其他被自动反序列化侧。

有没有办法让这些名字精缩尽可能无需手动想到的,用短串标注的一切吗?由此产生的XML易于人类阅读并不是一个问题。

回答

2

Hmya,注意微观优化像这样。用现代计算机硬件让他们回报是难以置信的。处理XML所涉及的I/O的真正成本不是数据量,而是定位它。字节很便宜,传输它们已经高度优化。它是一个磁盘驱动器读取头,可以放在服务器的某个地方,也可以在您自己的机器上,这决定了您的程序运行的速度。一旦它处于正确的位置,读取一个字节几乎与读取千字节一样昂贵。内存以同样的方式工作。

最终提示:如果这将是一个常见的优化,他们会拿出比IXmlSerializable的更好的东西。

1

为了定制超过您通过使用属性所能做到的XML序列化,您将需要您的类来实现IXmlSerializable接口。

1

如果人的可读性不是问题...为什么在所有的上使用xml - 可能类似于“协议缓冲区”(有C#实现可用)会在没有此问题的情况下为您提供所需级别的互操作性,包括自动获取所有属性的一些方法(如果您有兴趣,我可以多谈这个)。

另一种方法是简单地gzip数据; XML压缩令人惊讶,感谢所有重复的节点名称。

1

属性的性质意味着,这个不能做。请参阅can-attributes-be-added-dynamically-in-c#为什么。即使可以做到,我也同意汉斯认为这可能不值得。如果你真的关心这件事,那么你应该参考Marc的建议。

相关问题