1

I have two classes that are used for de/serializing an XML file.

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()
    {
    }
}

I'm trying to deserialize this file:

<?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>

It's all handled by this function:

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

When I run the code I get following error: No elements with this name found: './Units'. As you can see there already is an element called Units.

Pozzi Userpic
  • 347
  • 8
  • 30

1 Answers1

1

Read all your xml content from your path by using File.ReadAllText(fileName) and pass it to Deserialize method like.

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.
}
er-sho
  • 9,581
  • 2
  • 13
  • 26