自定义类型被序列化为空元素
Posted
技术标签:
【中文标题】自定义类型被序列化为空元素【英文标题】:Custom type is serialized to empty element 【发布时间】:2012-10-07 13:34:23 【问题描述】:我为 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)
【问题讨论】:
【参考方案1】:XML 序列化要求一个类必须有一个无参数的 构造函数。
此外,任何非公共的类成员都不会被序列化。 方法没有序列化。以及不具有 get 和 a 的属性 set 访问器未序列化。
序列化嵌套对象不是问题。 .Net 中的一切都是 对象。
编辑:破解这个答案.NET XML serialization
【讨论】:
【参考方案2】:您确实可以公开 _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();
【讨论】:
感谢 Rene,如果我将 _adres 公开,是否仍然可以(例如使用属性)将其呈现为单个元素:以上是关于自定义类型被序列化为空元素的主要内容,如果未能解决你的问题,请参考以下文章