反序列化此xml文件

时间:2014-10-28 19:34:16

标签: c# xml xml-serialization deserialization

我正在尝试使用以下内容反序列化文件,并收到错误:

<?xml version="1.0" encoding="utf-8"?>
<RootNode>
    <Collection>
         <Array1>
            <Array1Item Id="0"/>
         </Array1>
        <Array2>
            <Array2Item Id="7" Attribute="1" />
            <Array2Item Id="4" Attribute="2" />
            <Array2Item Id="16" Attribute="3" />
        </Array2>
    </Collection>
    <Collection>
         <Array1>
            <Array1Item Id="398"/>
         </Array1>
        <Array2>
            <Array2Item Id="7" Attribute="1" />
            <Array2Item Id="25" Attribute="2" />
            <Array2Item Id="27" Attribute="3" />
            <Array2Item Id="4" Attribute="4" />
            <Array2Item Id="10" Attribute="5" />
            <Array2Item Id="24" Attribute="6" />
            <Array2Item Id="26" Attribute="7" />
            <Array2Item Id="30" Attribute="8" />
            <Array2Item Id="31" Attribute="9" />
        </Array2>
    </Collection>
    <Collection>
        <Array1>
            <Array1Item Id="406"/>
         </Array1>
        <Array2>
            <Array2Item Id="7" Attribute="1" />
            <Array2Item Id="25" Attribute="2" />
            <Array2Item Id="27" Attribute="3" />
            <Array2Item Id="4" Attribute="4" />
            <Array2Item Id="10" Attribute="5" />
            <Array2Item Id="24" Attribute="6" />
            <Array2Item Id="26" Attribute="7" />
            <Array2Item Id="30" Attribute="8" />
            <Array2Item Id="31" Attribute="9" />
        </Array2>
    </Collection>
        <Collection>
                <Array1>
                    <Array1Item Id="2479"/>
                </Array1>
                <Array2>
                        <Array2Item Id="7" Attribute="1" />
                        <Array2Item Id="25" Attribute="2" />
                        <Array2Item Id="27" Attribute="3" />
                        <Array2Item Id="30" Attribute="4" />
                        <Array2Item Id="4" Attribute="5" />
                        <Array2Item Id="10" Attribute="6" />
                        <Array2Item Id="26" Attribute="7" />
                </Array2>
        </Collection>
        <Collection>
        <Array1>
            <Array1Item Id="742"/>
            <Array1Item Id="767"/>
                    <Array1Item Id="768"/>
                    <Array1Item Id="773"/>
                    <Array1Item Id="774"/>
                    <Array1Item Id="775"/>
                    <Array1Item Id="776"/>
                    <Array1Item Id="779"/>
                    <Array1Item Id="822"/>
                    <Array1Item Id="899"/>
                    <Array1Item Id="904"/>
                    <Array1Item Id="947"/>
                    <Array1Item Id="948"/>
                    <Array1Item Id="952"/>
                    <Array1Item Id="953"/>
                    <Array1Item Id="1021"/>
                    <Array1Item Id="1036"/>
                    <Array1Item Id="1085"/>
                    <Array1Item Id="1086"/>
                    <Array1Item Id="1087"/>
                    <Array1Item Id="1145"/>
                    <Array1Item Id="1146"/>
                    <Array1Item Id="1147"/>
                    <Array1Item Id="1148"/>
                    <Array1Item Id="1149"/>
                    <Array1Item Id="1151"/>
                    <Array1Item Id="1173"/>
                    <Array1Item Id="1194"/>
                    <Array1Item Id="1209"/>
                    <Array1Item Id="1213"/>
                    <Array1Item Id="1236"/>
                    <Array1Item Id="1243"/>
                    <Array1Item Id="1244"/>
                    <Array1Item Id="1248"/>
                    <Array1Item Id="1303"/>
                    <Array1Item Id="1399"/>
                    <Array1Item Id="1587"/>
                    <Array1Item Id="1589"/>
                    <Array1Item Id="1639"/>
                    <Array1Item Id="1655"/>
                    <Array1Item Id="1688"/>
                    <Array1Item Id="1708"/>
                    <Array1Item Id="1709"/>
                    <Array1Item Id="1713"/>
                    <Array1Item Id="1714"/>
                    <Array1Item Id="1735"/>
                    <Array1Item Id="1798"/>
                    <Array1Item Id="1814"/>
                    <Array1Item Id="1929"/>
                    <Array1Item Id="1944"/>
                    <Array1Item Id="1969"/>
                    <Array1Item Id="2034"/>
                    <Array1Item Id="2038"/>
                    <Array1Item Id="2059"/>
                    <Array1Item Id="2191"/>
                    <Array1Item Id="2362"/>
                    <Array1Item Id="2501"/>
                    <Array1Item Id="2980"/>
                    <Array1Item Id="2981"/>
                    <Array1Item Id="2982"/>
                    <Array1Item Id="2984"/>
                    <Array1Item Id="2985"/>
                    <Array1Item Id="3045"/>
                    <Array1Item Id="3047"/>
                    <Array1Item Id="3053"/>
                    <Array1Item Id="3054"/>
                    <Array1Item Id="3055"/>
                    <Array1Item Id="3149"/>
                    <Array1Item Id="3219"/>
                    <Array1Item Id="3220"/>
                    <Array1Item Id="3234"/>
                    <Array1Item Id="3288"/>
         </Array1>
                <Array2>
                        <Array2Item Id="7" Attribute="1" />
                </Array2>
        </Collection>
        <Collection>
            <Array1>
                    <Array1Item Id="2120"/>
                    <Array1Item Id="2125"/>
                    <Array1Item Id="2173"/>
                    <Array1Item Id="2534"/>
                    <Array1Item Id="2574"/>
                    <Array1Item Id="2575"/>
                    <Array1Item Id="2576"/>
                    <Array1Item Id="2577"/>
                    <Array1Item Id="2721"/>
             </Array1>          
                <Array2>
                        <Array2Item Id="7" Attribute="1" />
                </Array2>
        </Collection>
    <Collection>
         <Array1>
            <Array1Item Id="2299"/>
            <Array1Item Id="2366"/>
            <Array1Item Id="2464"/> 
            <Array1Item Id="2466"/>
            <Array1Item Id="2465"/>
            <Array1Item Id="2467"/>
         </Array1>
        <Array2>
            <Array2Item Id="7" Attribute="1" />
        </Array2>
    </Collection>
</RootNode>

这是我用来反序列化该文件的方法:

    protected virtual List<Collection> Deserialize()
    {
        List<Collection> data = new List<Collection>();
        try
        {
            using (var reader = new StreamReader(Path))
            {
                var xmlSerializer = new XmlSerializer(typeof(List<Collection>));
                data = (List<Collection>)xmlSerializer.Deserialize(reader);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        return data;
    }
}

我遇到了异常:“XML文档中存在错误(2,2)。”与Deserialize(reader)

一致

这是集合:

[Serializable,
     GeneratedCode("xsd", "2.0.50727.3038"),
     DesignerCategory("code"),
     DebuggerStepThrough,
     XmlType(AnonymousType = true)]
    public class Collection
    {
        public Collection()
        {
            Array1 = new Array1[0];
            Array2 = new Array2[0];
        }

        [XmlArrayItem("Array1")]
        public Array1Item[] Array1{ get; set; }

        [XmlArrayItem("Array2 ", IsNullable = true)]
        public Array2Item[] Array2 { get; set; }
    }

怎么了?

1 个答案:

答案 0 :(得分:0)

由于&lt; RootNode&gt;的存在,反序列化失败了。元件。反序列化器不期望这个元素;它期待一堆&lt; Collection&gt;元件。

相反,尝试使用像这样的类

从顶层反序列化
[XmlRootAttribute("RootNode")]
public class RootNode
{
    [XmlElement("Collection")]
    public Collection[] CollectionBag { get; set; }
}

将反序列化更改为

var xmlSerializer = new XmlSerializer(typeof(RootNode));
data = ((RootNode)xmlSerializer.Deserialize(reader)).CollectionBag;