C # - YAXLib: "Элементы с таким именем не найдены:" - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть два класса, которые используются для де-сериализации 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.

1 Ответ

0 голосов
/ 28 ноября 2018

Считайте весь ваш 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.
}
...