0

我有以下 XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
    <b attr0="">
        <c>
            <d attr1="" attr2="">
                <e>
                    <f/>
                    <g/>
                    <h/>
                    <i/>
                </e>
            </d>
                    <!-- ...more d's -->
        </c>
    </b>
    <b>
        <c>
            <d attr1="" attr2="">
                <e>
                    <f/>
                    <g/>
                    <h/>
                    <i/>
                </e>
            </d>
                    <!-- ...more d's -->
        </c>        
    </b>
    <!-- ...more b's -->
</a>

我想将其反序列化为 C# 对象,我正在使用以下类:

甲类:

[XmlRoot(ElementName = "a")]
public class a
{
    [XmlElement("b")]
    List<b> bs = new List<b>();
}

b类:

public class b
{
    [XmlAttribute("attr0")]
    String attr0{ get; set; }
    [XmlElement("c")]
    c c1 = new c();
}

c类:

public class c
{
    [XmlElement("d")]
    List<d> ds = new List<d>();
}

d类:

public class d
{
    [XmlAttribute(AttributeName = "attr1")]
    String attr1{ get; set; }
    [XmlAttribute(AttributeName = "attr2")]
    String attr2{ get; set; }
    [XmlElement("e")]
    List<e> es = new List<e>(); 
}

和 e 类:

public class e
{
    [XmlText]
    String f { get; set; }
    [XmlText]
    String g { get; set; }
    [XmlText]
    String h { get; set; }
    [XmlText]
    String i { get; set; }
}

并使用以下代码尝试反序列化它:

    public a deserialize()
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(a));
        System.IO.TextReader reader = new System.IO.StreamReader(@"C:\file.xml");
        object obj = deserializer.Deserialize(reader);
        a XmlData = (a)obj;
        reader.Close();
        return a;
    }

好吧,现在没有任何工作。我试图在其上添加一个 XMLArray 标记,但没有奏效。你们会帮我一个大忙,给我一些好的建议:)

4

2 回答 2

2

您的代码中有两个问题。

1)声明你想要反序列化的类成员的访问修饰符,public就像这样。默认的序列化实现仅适用于公共成员。

[XmlRoot(ElementName = "a")]
public class a
{
    [XmlElement("b")]
    public List<b> bs = new List<b>();
}

2)您不能[XmlText]在您的案例类中在单个对象中声明多个e。将它们改为[XmlElement], 。

public class e
{
    [XmlElement]
    public String f { get; set; }
    [XmlElement]
    public String g { get; set; }
    [XmlElement]
    public String h { get; set; }
    [XmlElement]
    public String i { get; set; }
}

然后它将起作用。

于 2013-10-23T08:48:03.937 回答
0
XElement xmlFile= new XElement("a",
                                new XElement("b",
                                    new XElement("c",
                                        new XElement("d", new XAttribute("attr1"," ") , new XAttribute("attr2"," ")),
                                        new XElement("e", new XElement("f"), new XElement("g"), new XElement("h"), new XElement("i")),
                                    new XElement("c",
                                         new XElement("d", new XAttribute("attr1"," ") , new XAttribute("attr2"," ")),
                                         new XElement("e", new XElement("f"), new XElement("g"), new XElement("h"), new XElement("i")),
                                    new XElement("Department", new XAttribute("Name","Automobile"))
                                ),
                                new XElement("b",
                                    new XElement("c",
                                        new XElement("d", new XAttribute("attr1"," ") , new XAttribute("attr2"," ")),
                                        new XElement("e", new XElement("f"), new XElement("g"), new XElement("h"), new XElement("i")),
                                    new XElement("c",
                                         new XElement("d", new XAttribute("attr1"," ") , new XAttribute("attr2"," ")),
                                         new XElement("e", new XElement("f"), new XElement("g"), new XElement("h"), new XElement("i"))
                                )

); xmlFile.Save(@"D:\file.xml");

如果它有助于解决您的问题,请尝试此操作。你可以用我序列化的相同方式反序列化。

编辑:

尝试在代码中添加最后一行。我尝试在代码部分中添加,但它并没有以某种方式发生。

于 2013-10-23T08:34:16.443 回答