2

我为 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>
<UserId>887339</UserId>
<UserName>Behhh, Joyce</UserName>
<CompanyId>6401970</CompanyId>
<Email/>
</User>

我认为隐式演员可以解决问题。

public static implicit operator string(EmailAdres s)
4

2 回答 2

1

XML 序列化要求类必须具有无参数构造函数。

此外,任何非公共的类成员都不会被序列化。方法没有序列化。没有 get 和 set 访问器的属性不会被序列化。

序列化嵌套对象不是问题。.Net 中的一切都是对象。

编辑:破解这个答案.NET XML 序列化

于 2012-10-17T10:08:49.223 回答
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();
    }

}

于 2012-10-17T10:51:39.457 回答