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;
}

}

User オブジェクトは Web サービスによって返されますが、残念ながら Email 要素は空にレンダリングされます。

<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のすべてがオブジェクトです。

編集:この答えをチャックする.NETXMLシリアル化

于 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 に答える