#c# #xml #xml-serialization
#c# #xml #xml-сериализация
Вопрос:
Как я могу добавить xsi: type в элемент xml.
Я пишу процедуру на C #, которая сериализует XML-файл с помощью XmlSerializer. Кажется, все в порядке, за исключением того, что я сначала считал второстепенным, но оказалось, что это не так.
вот мой код,
public class OuterElement
{
public string firstElement { get; set; }
public string secondElement { get; set; }
public InnerElement innerElement = new InnerElement();
}
public class InnerElement
{
[XmlAttribute(AttributeName="xsi:type")]
public string type { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
XmlSerializer serializer = new XmlSerializer(typeof(OuterElement));
OuterElement outerElement = new OuterElement();
outerElement.firstElement = "name";
outerElement.secondElement = "CD";
outerElement.innerElement.type = "testsample";
using (TextWriter writer = new StreamWriter(@"G:abc.xml"))
{
serializer.Serialize(writer, outerElement);
}
}
‘
Я хочу, чтобы xml выглядел так,
<OuterElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" lns:xsd="http://www.w3.org/2001/XMLSchema">
<innerElement xsi:type="testsample">
</innerElement>
<firstElement>name</firstElement>
<secondElement>CD</secondElement>
</OuterElement>
Заранее спасибо.
Ответ №1:
Вам нужно объявить правильное пространство имен для атрибута, например:
public class InnerElement
{
[XmlAttribute(Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string type = "bla";
}
Это приведет к желаемому результату:
<OuterElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<innerElement xsi:type="testsample" />
<firstElement>name</firstElement>
<secondElement>CD</secondElement>
</OuterElement>
Комментарии:
1. Если мне нужен sdtc: valueset означает, какое пространство имен я должен использовать?
2. Я бы не знал, но, основываясь на быстром поиске в Google, я бы сказал ‘urn: hl7-org: sdtc’
Ответ №2:
Вам нужно использовать атрибут XmlTypeAttribute
[XmlType("testsample")]
public class InnerElement
{
}
Это приведет к следующему:
<innerElement xsi:type="testsample" />