我正在通过WCF传输大块数据,我正在尝试优化发送的结果。我已经从NetDataContactSerializer切换到DataContractSerializer,但由于它不再被序列化为XML,我想知道到底发生了什么。
例如,假设我将以下内容的集合(100,000条记录)序列化为XML:
public class SomeDataObject
{
public string AnExcessivelyLongPropertyNameJustToIllustrateMyPoint { get; set; }
}
它看起来像这样:
<a:SomeDataObject>
<b:AnExcessivelyLongPropertyNameJustToIllustrateMyPoint>
ABC
</b:AnExcessivelyLongPropertyNameJustToIllustrateMyPoint>
</a:SomeDataObject>
现在,从上面可以看出,对于成千上万条记录来说,将属性命名为其他内容会有显着的性能提升,例如:
<a:SomeDataObject>
<b:NormalName>ABC</b:NormalName>
</a:SomeDataObject>
我的问题是:当使用netTcp绑定和默认的DataContactSerializer时,它是否足够智能,不能实际重复被序列化的属性的名称?
或者,如果您不知道答案,是否有一种简单的方法可以衡量这一点?
答案 0 :(得分:2)
要使WPF序列化具有较小的XML,请在Name
属性中添加短名称,如:
[DataContract(Name="sdo")]
public class SomeDataObject
{
[DataMember(Name = "axlpnjtimp")]
public string AnExcessivelyLongPropertyNameJustToIllustrateMyPoint { get; set; }
}
对于手动XML序列化,使用XmlSerializer
为类添加属性[XmlType(TypeName = "x")]
,为属性添加[XmlElement("y")]
。
在你的情况下,我会这样:
[XmlType(TypeName = "sdo")]
public class SomeDataObject
{
[XmlElement("axlpnjtimp")]
public string AnExcessivelyLongPropertyNameJustToIllustrateMyPoint { get; set; }
}
序列化xml:
<?xml version="1.0" encoding="utf-16"?>
<sdo>
<axlpnjtimp>Property Name</axlpnjtimp>
</sdo>
它将大大减少发送数据的大小。