Мне нужно создать следующий XML во время сериализации: (фрагмент)XML атрибут не получает префикс пространства имен
<IncidentEvent a:EventTypeText="Beginning" xmlns:a="http://foo">
<EventDate>2013-12-18</EventDate>
<EventTime>00:15:28</EventTime>
</IncidentEvent>
Класс в вопросе выглядит следующим образом:
public class IncidentEvent
{
public string EventDate { get; set; }
public string EventTime { get; set; }
[XmlAttribute("EventTypeText", Namespace = "http://foo")]
public string EventTypeText { get; set; }
}
Оказывается, что сериализатором замечает, что пространство имен уже объявлено в xmlns: в корне и игнорирует мой атрибут. Я также попытался следующие:
[XmlRoot(Namespace = "http://foo")]
public class IncidentEvent
{
public string EventDate { get; set; }
public string EventTime { get; set; }
private XmlSerializerNamespaces _Xmlns;
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Xmlns
{
get
{
if (_Xmlns == null)
{
_Xmlns = new XmlSerializerNamespaces();
_Xmlns.Add("ett", "http://foo");
}
return _Xmlns;
}
set
{
_Xmlns = value;
}
}
[XmlAttribute("EventTypeText", Namespace = "http://foo")]
public string EventTypeText { get; set; }
}
Это приводит к следующему XML:
<ett:IncidentEvent EventTypeText="Beginning" xmlns:ett="http://foo">
<ett:EventDate>2013-12-18</ett:EventDate>
<ett:EventTime>00:15:28</ett:EventTime>
</ett:IncidentEvent>
Который не то, что я хочу. Элемент не должен быть префиксным, атрибут должен быть. Что нужно, чтобы заставить сериализатор понять, что я хочу?
Это, похоже, разваливается, если вам нужно сериализовать этот объект как дочерний объект другого объекта. Он работал нормально, когда я тестировал его по одному сценарию, но я забыл о другом. Тем не менее, хороший ответ. – kettch