我有两个类(人员和地址)需要通过 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/