c# - 如何在wcf中序列化 protected 属性

标签 c# wcf serialization

我有两个类(人员和地址)需要通过 wcf 发送,这些类如下所示:

public class PersoanaFizica :IExtensibleDataObject
{
    [DataMember]
    private Guid _id;
    [DataMember(Name = "Id")]
    protected virtual Guid Id
    {
        get { return _id; }
        set { _id = value; }
    }

    private ExtensionDataObject _extensionData;
    public virtual ExtensionDataObject ExtensionData
    {
        get
        {
            return _extensionData;
        }
        set
        {
            _extensionData = value;
        }
    }


    private string _firstName;
    [Searchable(PropertyName="FirstName")]
    [DataMember]
    public virtual string FirstName 
    {
        get { return this._firstName; }
        set { this._firstName = value; }
    }

    private string _lastName;
    [Searchable(PropertyName="LastName")]
    [DataMember]
    public virtual string LastName 
    {
        get { return this._lastName; }
        set { this. _lastName = value; }
    }

    private Address _address;
    [Searchable(PropertyName="Address")]
    [DataMember]
    public virtual Address Address 
    {
        get { return this._address; }
        set { this._address = value; }
    }
}

public class Address : IExtensibleDataObject
{
 [DataMember]
    private Guid _id;
    [DataMember]
    public virtual Guid Id
    {
        get { return _id; }
        set { _id = value; }
    }

    private ExtensionDataObject _extensionData;
    public virtual ExtensionDataObject ExtensionData
    {
        get
        {
            return _extensionData;
        }
        set
        {
            _extensionData = value;
        }
    }

        private string _country;
    [Searchable(PropertyName="Country")]
    [DataMember]
    public virtual string Country 
    {
        get { return this._country; }
        set { this._country = value; }
    }
// and some other properties related to the address
}

问题是,当我尝试通过 wcf 发送它们时,客户端收到的 Id 属性设置为 00000-0000-00000-00000 或类似的值。

知道为什么会发生这种情况吗?以及如何序列化正确的值?

最佳答案

nope... did not help. I just looked at the code generated by svcutil.exe (thats what i use to generate my client) and i couldn't find an Id property at all. I tried changing the protected keyword to public and everything worked fine. It seems that the problem is with the fact that i need the properties to be protected and not public.

Denis - 您的 WCF 客户端是否有可能使用 XmlSerializer(它使用 get 和 set 方法序列化公共(public)读/写属性)而不是 DataContractSerializer? DataContractSerializer 肯定会序列化 protected 属性或字段 - 它确实不关心 .NET 可见性修饰符......

您应该在生成的 WCF 客户端代理中看到这一点 - 您是否有 [DataContract][DataMember] 属性,或者您是否看到 [XmlElement] 等等? WCF 客户端代理中的类是否有 [DataContractAttribute][XmlTypeAttribute]

关于c# - 如何在wcf中序列化 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2940000/

相关文章:

c# - 频繁序列化时使用Xml序列化的正确方法

c# - 两个 WCF 方法之间的全局变量

c# - 在没有 OWIN 的情况下使用 Microsoft Identity 的示例

c# - Entity Framework 脚本生成

java - 如何在 Eclipse 中生成自定义的serialVersionUID

c# - 序列化 MDI Winforms 以实现持久性

c# - Nant:如何构造 svn:externals 以构建引用第 3 方 dll 的类库

c# - 为什么成员访问修饰符对 nameof() 很重要?

c# - 记录 WCF 服务构造函数抛出的异常?

wcf - WCF net.tcp 绑定(bind)分布式事务超时问题