1

我有两个用于反序列化 XML 文件的类。

XmlExampleBasicUnit.cs

[YAXSerializeAs("Unit")]
public class XmlExampleBasicUnit
{
    [YAXSerializeAs("StringVar")]
    public String StringVar { get; set; }
    [YAXSerializeAs("Int32Var")]
    public Int32 Int32Var { get; set; }
    [YAXSerializeAs("DoubleVar")]
    public Double DoubleVar { get; set; }
    [YAXSerializeAs("DateTimeVar")]
    public String DateTimeVar { get; set; }
    [YAXSerializeAs("CharVar")]
    public String CharVar { get; set; }
}

XmlExampleCollectionOfUnits.cs

[YAXSerializeAs("CollectionOfUnits")]
public class XmlExampleCollectionOfUnits
{
    [YAXSerializeAs("Units")]
    public List<XmlExampleBasicUnit> Units { get; set; }

    public XmlExampleCollectionOfUnits(List<XmlExampleBasicUnit> units)
    {
        Units = units;
    }

    public XmlExampleCollectionOfUnits()
    {
    }
}

我正在尝试反序列化此文件:

<?xml version="1.0" encoding="utf-8"?>
<CollectionOfUnits>
<Units>
    <Unit>
        <StringVar>TohleJeString</StringVar>
        <Int32Var>24</Int32Var>
        <DoubleVar>29.6</DoubleVar>
        <DateTimeVar>17.11.1968</DateTimeVar>
        <CharVar>c</CharVar>
    </Unit>
    <Unit>
        <StringVar>TohleJeTakéString</StringVar>
        <Int32Var>17</Int32Var>
        <DoubleVar>5.9</DoubleVar>
        <DateTimeVar>06.07.1415</DateTimeVar>
        <CharVar>p</CharVar>
    </Unit>
    <Unit>
        <StringVar>NoATohleTaké</StringVar>
        <Int32Var>2</Int32Var>
        <DoubleVar>78.5</DoubleVar>
        <DateTimeVar>06.12.1774</DateTimeVar>
        <CharVar>x</CharVar>
    </Unit>
</Units>

这一切都由这个函数处理:

public T Import<T>(String fileName) where T : class
{
    YAXSerializer serializer = new YAXSerializer(typeof(T));
    return (T)serializer.Deserialize(fileName);
}

当我运行代码时,出现以下错误:No elements with this name found: './Units'.如您所见,已经有一个名为Units.

4

1 回答 1

1

通过使用从路径中读取所有 xml 内容File.ReadAllText(fileName)并将其传递给Deserialize类似的方法。

public static T Import<T>(String fileName) where T : class
{
    string xmlData = File.ReadAllText(fileName);              //Read xml content from path
    YAXSerializer serializer = new YAXSerializer(typeof(T));
    return (T)serializer.Deserialize(xmlData);                //Pass xml content to Deserialize.
}
于 2018-11-28T13:35:56.497 回答