Я нашел некоторый код для сериализации классов в XmlElement здесь: Как преобразовать класс C # в XMLElement или XMLDocument В частности, я использовал решение Дейва Андерсена .
public static XmlElement SerializeToXmlElement(object o)
{
XmlDocument doc = new XmlDocument();
using(XmlWriter writer = doc.CreateNavigator().AppendChild())
{
new XmlSerializer(o.GetType()).Serialize(writer, o);
}
return doc.DocumentElement;
}
Однако я понял, что когда я использую функцию GetElementById
в созданном документе, результат всегда будет нулевым.После некоторого наблюдения я обнаружил, что XmlDocument использует внутренний список с именем _htElementIdMap
.Этот список, кажется, не инициализирован.
До сих пор я не смог понять, что я делаю неправильно, или, возможно, я пытаюсь сделать что-то, что не поддерживается.Кто-нибудь знает, как я могу это исправить?
Заранее спасибо
Редактировать:
Упрощенная версия того, что я делаю, заключается в следующем
public static void Main(String[] args)
{
var timestamp = new TimestampType
{
Id = "Test1",
Created = new AttributedDateTime
{
Value = DateTime.Now.ToUniversalTime().ToString("o")
},
Expires = new AttributedDateTime
{
Value = DateTime.Now.AddDays(1).ToUniversalTime().ToString("o")
}
};
var timestampXmlElement = SerializeToXmlElement(timestamp);
var result1 = timestampXmlElement.OwnerDocument.GetElementById("Test1");
}
public static XmlElement SerializeToXmlElement(object o)
{
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild())
{
new XmlSerializer(o.GetType()).Serialize(writer, o);
}
return doc.DocumentElement;
}
проблема в том, что result1 равен нулю.
это xml для timestampXmlElement:
<Timestamp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" p3:Id="Test1" xmlns:p3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<p3:Created>2018-06-12T12:58:20.5213777Z</p3:Created>
<p3:Expires>2018-06-13T12:58:20.5249304Z</p3:Expires>
</Timestamp>