我正在尝试通过在.net 4.0上运行的asmx webservice发送自定义类的对象,但我得到的只是一个空响应。见下文:
<soap:Body>
<ActivateResponse xmlns="http://tempuri.org/">
<ActivateResult /> <!-- why is this empty -->
</ActivateResponse>
</soap:Body>
但是,如果我修改我的方法并将返回类型更改为例如从 A 类到 B ,那么它将返回对象 B <的所有属性/ em>正确。见下文:
<ActivateResponse xmlns="http://tempuri.org/">
<ActivateResult>
<BtAddress>string</BtAddress>
<Name>string</Name>
<Number>string</Number>
</ActivateResult>
</ActivateResponse>
我想知道它为什么会发生?我可以归咎于 A 类的序列化,但是我没有想到我的类文件。两个类文件在内容方面几乎相似,并且不包含任何Serialize属性。
那么,为什么webservice返回一种类型,而不是另一种类型呢?
A类:
public class A
{
private string code;
private bool isValid;
private int maxUniqueActivations;
private DateTime dateAdded;
private Customer customer = null;
private bool _initAsEmpty = false;
public License()
{
_initAsEmpty = true;
}
public string LicenseCode
{
get { return code; }
//set { code = String.IsNullOrWhiteSpace(value)? null : value.Trim(); }
}
//If i change return type to Customer, it works too
//so i dont think it should be blamed
public Customer Customer
{
get { return customer; }
}
public bool IsValid
{
get { return isValid; }
}
public int MaxUniqueActivations
{
get { return maxUniqueActivations; }
}
public DateTime DateAdded
{
get { return dateAdded; }
}
}
B类:
public class Phone
{
private string btAddress, name, number;
private bool isValid;
private DateTime dateAdded;
private bool _initAsEmtpy = false;
public Phone()
{
_initAsEmtpy = true;
}
public string BtAddress
{
get { return btAddress; }
set { btAddress = string.IsNullOrWhiteSpace(value) ? null : value.Replace(":", "").Trim(); }
}
public string Name
{
get { return name; }
set { name = string.IsNullOrWhiteSpace(value) ? null : value.Trim(); }
}
public string Number
{
get { return number; }
set { number = string.IsNullOrWhiteSpace(value) ? null : value.Trim(); }
}
public bool IsValid
{
get { return isValid; }
}
public DateTime DateAdded
{
get { return dateAdded; }
}
}
某些方法被抑制
答案 0 :(得分:2)
为了可序列化,类必须在其属性上具有公共setter。这是A类和B类之间的差异,以及A不会序列化的原因。
可能:)
答案 1 :(得分:0)
我认为问题可能出在Customer
类。也许它是私人或其他东西。试一试。