我们有一个第三方dll包含(除其他外)我们的实体.
entites都标有[Serializeable]
属性.
我们现在需要创建一个新的WCF服务,它将公开一些这样的实体.
问题是,由于entites未使用DataContract
和DataMember
属性声明,因此附加了属性名称__BackingField
!
我知道使用DataContarct\Member属性将解决这个问题,但鉴于我无法修改第三方dll与实体,是否有不同的解决方法?
使用该[Serializable]
属性修饰的类型将其字段序列化,而不是属性(即[Serializable]
"合同").如果第三方类型使用自动属性(如下所示),编译器将创建一个带有k_BackingField后缀的字段,这将是序列化的.
如果您无法更改第三方库中的类型,则可以选择在客户端上使用相同的库.在为服务创建代理时(使用svcutil或Add Service Reference),您可以引用第三方库,并且生成的客户端不会为合同创建新类型,而是重用库中的类型.这样您就不必处理具有公共_BackingField属性名称的类型.
自动属性:
[Serializable]
public class MyType
{
public string MyProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编译器会把它变成类似的东西
[Serializable]
public class MyType
{
private string <MyProp>k_BackingField;
public string MyProp
{
[CompilerGenerated]
get { return this.<MyProp>k_BackingField; }
[CompilerGenerated]
set { this.<MyProp>k_BackingField = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2530 次 |
最近记录: |