1

外部 xml をオブジェクトに逆シリアル化しようとしています。私はこの xml をまったく制御できません。

次に例を示します。

<response>
 <date>2012-05-23 00:00:00</date>
 <users>
  <userObject0>
   <name>John</name>
   <surname>Smith</surname>
  </userObject0>
  <userObject1>
   <name>Jane</name>
   <surname>Doe</surname>
  </userObject1>
 </users>
</response>

なぜこのように行われるのかわかりません。また、その xml を逆シリアル化して userObject の配列を取得する方法もわかりません。

それは可能ですか?

編集:私が取り組んでいるプロジェクトは.net 2.0にあることに注意してください

4

2 に答える 2

1

データが「適合」しない場合は、XmlSerializer使用しないでくださいXmlSerializerXmlDocumentまたはなどの xml プロセッサを使用しますXDocument。次に例を示します。

    var response = XElement.Parse(xml);
    var users = (from user in response.Element("users").Elements()
                 select new User {
                     Name = (string) user.Element("name"),
                     Surname = (string) user.Element("surname")
                 }).ToList()
于 2012-05-23T10:59:09.020 に答える
0

XmlSerializer を使用して逆シリアル化できます。

    // Remove numbers from userObject tags
    var xmlStringReplaced = Regex.Replace(xmlString, "<(/?)userObject[0-9]+>", "<$1userObject>");
    // XmlDeserialize the new XML string to a Response object
    var stringReader = new StringReader(xmlStringReplaced);
    var xmlSerialize = new XmlSerializer(typeof(Response), new XmlRootAttribute("response"));
    var response = (Response)xmlSerialize.Deserialize(stringReader);

そして、逆シリアル化する型:

public class Response
{
    [XmlIgnore]
    public DateTime Date { get; set; }

    [XmlElement("date")]
    public String DateXmlTemp
    {
        get { return Date.ToString("yyyy-MM-dd HH:mm:ss"); }
        set { Date = DateTime.Parse(value); }
    }

    [XmlArray("users")]
    [XmlArrayItem("userObject")]
    public List<UserObject> Users { get; set; }
}

public class UserObject
{
    [XmlElement("name")]
    public String Name { get; set; }

    [XmlElement("surname")]
    public String Surname { get; set; }
}

userObject タグで数値を使用する場合は、代わりに Regex.Replace を変更してタグの属性として追加し、XmlAttribute("id") 属性を使用して UserObject クラスにプロパティを追加します。

于 2012-06-05T22:42:20.197 に答える