WCF - 如何有效地发送GUID(而不是字符串)

Sim*_*win 7 c# wcf

我有一个包含大量数据传输对象的集合,我需要通过WCF发送到Silverlight客户端.我正在使用默认的DataContractSerializer和HTTPS通道.

以下是一种DTO的示例.

[DataContract(Namespace = Constants.OrgStructureNamespace)]
public class EntityInfo : IExtensibleDataObject
{
    [DataMember] public Guid EntityID { get; set; }
    [DataMember] public EntityType EntityType { get; set; }
    [DataMember] public IList<Guid> EntityVersions { get; set; }
    [DataMember] public IList<Guid> OrganisationStructures { get; set; }

    #region IExtensibleDataObject Members
    ...
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

服务器端的域实体使用GUID作为主键.这些序列化为36字节长的字符串.二进制形式的GUID应该只有16个字节长.

是否有一个技巧让DataContractSerializer将我的GUID序列化为二进制而不是作为冗长的字符串来提高性能?

Dr.*_*ice 3

尝试这个:

[DataContract(Namespace = Constants.OrgStructureNamespace)]
public class EntityInfo : IExtensibleDataObject
{
    public Guid EntityID { get; set; }

    [DataMember(Name="EntityID")]
    byte[] EntityIDBytes
    {
        get { return this.EntityID.ToByteArray(); }
        set { this.EntityID = new Guid(value); }
    }

    [DataMember]
    public EntityType EntityType { get; set; }
    [DataMember]
    public IList<Guid> EntityVersions { get; set; }
    [DataMember]
    public IList<Guid> OrganisationStructures { get; set; }

    #region IExtensibleDataObject Members
    // ...
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

看起来 DataContractSerializer 通过 Base64 编码来处理字节数组,而它似乎只使用 Guid.ToString 方法来处理 Guid。