C # XML Reader не возвращает ничего при попытке доступа к XML-файлу - PullRequest
0 голосов
/ 12 декабря 2018

Я десериализирую следующий xml, который генерируется сериализацией.

<BattInfo>
  <Battery>
    <BattName>TestBattery</BattName>
    <NumCellSeries>12</NumCellSeries>
    <NumCellParallel>10</NumCellParallel>
    <CelltoPackResistanceSum>3</CelltoPackResistanceSum>
    <BattThermalResistance>15</BattThermalResistance>
    <BattHeatCapacity>12</BattHeatCapacity>
  </Battery>
</BattInfo> 

Код, который я использую:

public class BattModel
{
    public string BattName { get; set; }
    public double NumCellSeries { get; set; }
    public double NumCellParallel { get; set; }
    public double CelltoPackResistanceSum { get; set; }
    public double BattThermalResistance { get; set; }
    public double BattHeatCapacity { get; set; }

}

public class BattInfo
{
    [XmlElement("Battery")]
    public List<BattModel> Battery { get; set; }

    public BattInfo()
    {
        this.Battery = new List<BattModel>();
    }
    public BattInfo(params BattModel[] data) : this()
    {
        this.Battery.AddRange(data);
    }
    public void Save(string filename)
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        XmlWriter writer = XmlWriter.Create(filename, settings);
        XmlSerializer serializer = new XmlSerializer(typeof(BattInfo));
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        serializer.Serialize(writer, this,ns);
        writer.Flush();
        writer.Close();
    }
    public BattInfo Load(string filename)
    {
        XmlReader reader = XmlReader.Create(filename);
        XmlSerializer serializer = new XmlSerializer(typeof(BattInfo));
        return (BattInfo)serializer.Deserialize(reader);
    }


}

XML сериализуется правильно.Но когда я пытаюсь прочитать его из xml, сгенерированного с использованием сериализации, он ничего не возвращает при чтении файла через xmlreader.

1 Ответ

0 голосов
/ 12 декабря 2018

Я сделал метод Load статическим и попробовал это ... Он отлично работает здесь.Вот код:

void Main()
{
    new BattInfo(new BattModel(){ BattName= "test"}).Save(@"tmp.xml");  
    Console.Out.Write(BattInfo.Load(@"tmp.xml").Battery[0].BattName);
}

// Define other methods and classes here
public class BattModel
{
    public string BattName { get; set; } 
    public double NumCellSeries { get; set; }
    public double NumCellParallel { get; set; }
    public double CelltoPackResistanceSum { get; set; }
    public double BattThermalResistance { get; set; }
    public double BattHeatCapacity { get; set; }

}

public class BattInfo
{
    [XmlElement("Battery")]
    public List<BattModel> Battery { get; set; }

    public BattInfo()
    {
        this.Battery = new List<BattModel>();
    }
    public BattInfo(params BattModel[] data) : this()
    {
        this.Battery.AddRange(data);
    }
    public void Save(string filename)
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        XmlWriter writer = XmlWriter.Create(filename, settings);
        XmlSerializer serializer = new XmlSerializer(typeof(BattInfo));
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        serializer.Serialize(writer, this,ns);
        writer.Flush();
        writer.Close();
    }
    public static BattInfo Load(string filename)
    {
        XmlReader reader = XmlReader.Create(filename);
        XmlSerializer serializer = new XmlSerializer(typeof(BattInfo));
        return (BattInfo)serializer.Deserialize(reader);
    }
} 

Вы ожидали, что метод Load заполнит существующий экземпляр, из которого вы вызвали его?Короче говоря, XmlSerializer строго конструктивен, так что вы не можете придумать.

...