0

试图反序列化一些 xml,但我从中检索它的第三方已经以多种方式格式化了特定标签。在下面的示例中,它是值标签。它可以有一个字符串或多个带有更多信息的内部标签

最好我希望这种情况自动发生并继续遵循这种代码结构

[XmlRoot(ElementName = "ContactField")]
public class ContactField
{
    [XmlElement("id")]
    public int id { get; set; }

    [XmlElement("type")]
    public string type { get; set; }

    [XmlElement("value")]
    public FieldValue values { get; set; }

}

有什么方法可以使用 XmlSerializer 根据其内容以不同方式处理标签,还是我会被困在手动操作中?

<contact>
        <isConnection>false</isConnection>
        <id>62</id>
        <fields>
            <id>8</id>
            <type>id</type>
            <value>test@test.com</value>
            <editedBy>OWNER</editedBy>
        </fields>
        <fields>
            <id>95</id>
            <type>notes</type>
            <value>Dummy user for testing</value>
            <editedBy>OWNER</editedBy>
        </fields>
        <fields>
            <id>96</id>
            <type>birthday</type>
            <value>
                <day>11</day>
                <month>5</month>
                <year>1988</year>
            </value>
            <editedBy>OWNER</editedBy>
        </fields>
</contact>
4

1 回答 1

2

我认为你可以通过定义你的类来实现它

   [XmlRoot(ElementName = "contact")]
   public class ContactField
        {
            [XmlElement("id")]
            public int id { get; set; }

            [XmlElement("type")]
            public string type { get; set; }

            [XmlElement("fields")]
            public Field[] fields { get; set; }
        }

        public class Field
        {
            [XmlElement("value")]
            public SubField SubField { get; set; }
        }

        public class SubField
        {
            [XmlText]
            public String Value { get; set; }

            [XmlElement("day")]
            public String Day { get; set; }

            [XmlElement("month")]
            public String Month { get; set; }

            [XmlElement("year")]
            public String Year { get; set; }
        }

我用这样的方式测试了它

    String xml = @"<contact>
        <isConnection>false</isConnection>
        <id>62</id>
        <fields>
            <id>8</id>
            <type>id</type>
            <value>test@test.com</value>
            <editedBy>OWNER</editedBy>
        </fields>
        <fields>
            <id>95</id>
            <type>notes</type>
            <value>Dummy user for testing</value>
            <editedBy>OWNER</editedBy>
        </fields>
        <fields>
            <id>96</id>
            <type>birthday</type>
                <value><day>11</day>
                <month>5</month>
                <year>1988</year></value>
            <editedBy>OWNER</editedBy>
        </fields>
</contact>";
var xmlSerializer  = new XmlSerializer(typeof (ContactField));
   using (var stringReader = new StringReader(xml))
   {
        var contactField = (ContactField) xmlSerializer.Deserialize(stringReader);
   }
于 2013-09-17T21:49:19.813 回答