Ich habe ein seltsames Problem mit XML-Deserialisierung in C#. Das Serialisieren des Objekts funktioniert wie erwartet, aber das Deserialisieren macht das Listenwertattribut Files
leer.C# - Serialisierungsliste funktioniert, aber Deserialisierung gibt leere Liste zurück
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Text;
namespace Converter
{
[Serializable]
[XmlRoot("userinput")]
public class Input
{
[XmlArray("files")]
[XmlArrayItem(Type = typeof(FilePair), ElementName = "filepair")]
public List<FilePair> Files;
public Input()
{ }
}
}
und das Element:
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace Converter
{
[Serializable]
public class FilePair
{
[XmlElement("file1")]
public string File1;
[XmlElement("file2")]
public string File2;
public FilePair() { }
}
public enum FileSource { Foo, Bar };
}
und eine XML-Beispiel:
<userinput>
<files>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
</files>
</userinput>
Überprüfen Sie diese kann helfen https://StackOverflow.com/Questions/517064/deserializing-a-generic-List-ReTurns-Null –
wenn ich dies versuche, bekomme ich "Das XML-Element 'file1' aus Namespace ' 'ist bereits im aktuellen Bereich vorhanden. Verwenden Sie XML-Attribute, um einen anderen XML-Namen oder Namespace für das Element anzugeben. " - Ist das dein tatsächlicher Code? vermutlich meinst du '[XmlElement (" file2 ")]'? –
@MarcGravell Nein Ich habe ein bisschen anonymisiert, da es mir nicht behagt, den tatsächlichen Code von der Arbeit aus zu posten. Die zweite "Datei1" sollte "Datei2" lesen. Mein schlechtes, aber nicht das Problem im ursprünglichen Code. Ich habe meine Antwort bearbeitet, um das zu korrigieren. – kutschkem