给定一个类:
[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
)。