我有一个包含大量数据传输对象的集合,我需要通过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序列化为二进制而不是作为冗长的字符串来提高性能?
尝试这个:
[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。
| 归档时间: |
|
| 查看次数: |
7584 次 |
| 最近记录: |