C # XmlSerializer объект с различными способами установки атрибутов - PullRequest
0 голосов
/ 17 октября 2018

У меня есть определение класса, подобное этому

public class ScenarioModel {
    public string Version { get; set; }
}

Я хочу сериализовать экземпляр этого класса в 2 различных XML-файла формата.
(с использованием System.Xml.Serialization.XmlSerializer)

Файл 1:

<?xml version="1.0" encoding="utf-8"?>
<Scenario>
    <Version>1.0.0</Vesion>
</Scenario>

Файл 2:

<?xml version="1.0" encoding="utf-8"?>
<Scenario version="1.0.0">
</Scenario>

Как мне выполнить настройки для моего ScenarioModel определения класса.

1 Ответ

0 голосов
/ 17 октября 2018

Модель:

[XmlRoot("Scenario")]
public class ScenarioModel
{
    public string Version { get; set; }
}

Program.cs:

static void Main(string[] args)
{
    ScenarioModel model = new ScenarioModel { Version = "1.0.0" };

    XmlSerializer ser = null;
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add(string.Empty, string.Empty);

    Console.WriteLine("File 1\n==================");
    ser = new XmlSerializer(model.GetType());
    ser.Serialize(Console.Out, model, ns);

    Console.WriteLine("\n\nFile 2\n==================");
    XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();
    XmlAttributes attr = new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("Version") };
    attrOverrides.Add(model.GetType(), "Version", attr);
    ser = new XmlSerializer(model.GetType(), attrOverrides);
    ser.Serialize(Console.Out, model, ns);

    Console.WriteLine();
    Console.ReadLine();
}

Должно дать вам что-то вроде:

File 1
==================
<?xml version="1.0" encoding="utf-8"?>
<Scenario>
  <Version>1.0.0</Version>
</Scenario>

File 2
==================
<?xml version="1.0" encoding="utf-8"?>
<Scenario Version="1.0.0" />
...