WCF Serializableable实体和__BackingField

ste*_*rnr 5 wcf serialization

我们有一个第三方dll包含(除其他外)我们的实体.
entites都标有[Serializeable]属性.

我们现在需要创建一个新的WCF服务,它将公开一些这样的实体.
问题是,由于entites未使用DataContractDataMember属性声明,因此附加了属性名称__BackingField!

我知道使用DataContarct\Member属性将解决这个问题,但鉴于我无法修改第三方dll与实体,是否有不同的解决方法?

car*_*ira 5

使用该[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)