Извиняюсь за длинный пост, код и файлы, предоставленные для устранения проблемы.
Итак, я хочу воспроизвести некоторые XML-файлы с использованием C # serializer.Эти XML-файлы должны соответствовать определенной схеме, которая не может быть скомпилирована с помощью инструмента Visual Studio XSD, поэтому я продолжаю создавать классы из необходимых XML-файлов, используя специальную вставку в Visual Studio.
Проблема IЯ добавляю соответствующие узлы с префиксом «apd:», применяемым для определения URL для каждого узла.
Пример XML-файла для демонстрации:
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns="http://www.transxchange.org.uk/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails">
<from>Jani</from>
<heading>
<apd:body>AddressAndPersonDetails</apd:body>
</heading>
</note>
Visual Studio создаетследующий класс через 'paste special \ paste xml as classes':
// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.transxchange.org.uk/")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.transxchange.org.uk/", IsNullable = false)]
public partial class note
{
[XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
public string apd = "http://www.govtalk.gov.uk/people/AddressAndPersonalDetails";
private string fromField;
private noteHeading headingField;
/// <remarks/>
public string from
{
get
{
return this.fromField;
}
set
{
this.fromField = value;
}
}
/// <remarks/>
public noteHeading heading
{
get
{
return this.headingField;
}
set
{
this.headingField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.transxchange.org.uk/")]
public partial class noteHeading
{
private string bodyField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.govtalk.gov.uk/people/AddressAndPersonalDetails")]
public string body
{
get
{
return this.bodyField;
}
set
{
this.bodyField = value;
}
}
}
** Примечание. Мне пришлось добавить следующее, чтобы получить атрибут xmlns: apd = "", приписанный примечанию.узел:
[XmlAttribute(Namespace = XmlSchema.InstanceNamespace)]
public string apd =
"http://www.govtalk.gov.uk/people/AddressAndPersonalDetails";
Выполнение через следующий код:
static void Main(string[] args)
{
XmlSerializer Serialiser = new XmlSerializer(typeof(note));
note readFile = new note();
try
{
using (Stream reader = new FileStream(@"C:\test projects\xmlinput.xml", FileMode.Open))
{
readFile = (note)Serialiser.Deserialize(reader);
}
}
catch (Exception ex)
{
}
try
{
System.Xml.Serialization.XmlSerializer writer =
new System.Xml.Serialization.XmlSerializer(typeof(note));
var path = @"C:\test projects\output.xml";
System.IO.FileStream file = System.IO.File.Create(path);
writer.Serialize(file, readFile);
file.Close();
}
catch (Exception ex)
{
}
}
Результат в следующем файле:
<?xml version="1.0"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails" xmlns="http://www.transxchange.org.uk/">
<from>Jani</from>
<heading>
<body xmlns="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails">AddressAndPersonDetails</body>
</heading>
</note>
Я знаю, что что-то здесь упустил(тем более, что я добавляю var для добавления атрибута apd, но любые идеи, указывающие мне правильное направление, будут очень благодарны.