我为EmailAdres创建了一个自定义类型,并在名为User:
的类中使用了此类型 public class User
{
public string UserId { get; set; }
public string UserName { get; set; }
public int CompanyId { get; set; }
public EmailAdres Email { get; set; }
}
[Serializable]
public class EmailAdres
{
string _adres;
public EmailAdres()//needed for serialization
{
}
public EmailAdres(string s)
{
_adres = s;
}
public static implicit operator EmailAdres(string s)
{
return new EmailAdres(s);
}
public static implicit operator string(EmailAdres s)
{
return s._adres;
}
}
Web服务返回User对象,但遗憾的是Email元素呈现为空:
<User>
<UserId>887339</UserId>
<UserName>Behhh, Joyce</UserName>
<CompanyId>6401970</CompanyId>
<Email/>
</User>
我认为隐式演员会做到这一点。
public static implicit operator string(EmailAdres s)
答案 0 :(得分:1)
XML序列化要求类必须具有无参数 构造
此外,任何非公开的类成员都不会被序列化。 方法未序列化。并且没有get和a的属性 set accessor未序列化。
序列化嵌套对象不是问题。 .Net中的所有内容都是 对象
编辑:查看这个答案.NET XML serialization
答案 1 :(得分:0)
您确实可以将_adres属性设为公开。如果您不想这样做,可以在自定义类上实现接口IXmlSerializable:
public class EmailAdres: IXmlSerializable
{
string _adres;
// other implementation stuff removed
public void ReadXml(System.Xml.XmlReader reader)
{
_adres = reader.ReadElementContentAsString();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteValue(_adres);
}
public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
}
}