【发布时间】:2009-07-02 12:09:49
【问题描述】:
给定一个类:
[DataContract]
public sealed class ChangedField
{
[DataMember(Name="I")] public ushort FieldId { get; set; }
[DataMember(Name="V")] public object Value { get; set; }
}
WireShark 显示,当通过 WCF TCP 绑定发送时,消息的编码是二进制的(仅限可打印字符,但你明白了):
ChangedFielda.I..a.V....e:double..e http://www.w3.org/2001/XMLSchema.s.....a.
但是如果我像这样序列化这种类型的实例......
var ser = new DataContractSerializer(typeof(ChangedField));
var stream = new MemoryStream();
ser.WriteObject(stream, new ChangedField { FieldId = 1, Value = 1.23d });
...然后流包含类似于以下内容的 SOAP XML:
<ChangedField>
<I>1</I>
<V i:type="a:double" xmlns:a="http://www.w3.org/2001/XMLSchema">1.23</V>
</ChangedField>
所以我的问题是如何控制DataContractSerializer 在我自己的代码中生成这种二进制表示?
顺便说一句:
如您所见,消息因object 属性必须对其类型进行编码(因此是URI)而变得臃肿。我将对此进行更改以使用自定义二进制编码,因为在我的场景中,字段 ID 确定类型(在本例中为 double)。
【问题讨论】:
标签: wcf datacontractserializer