getelementById возвращает null после сериализации объекта в XmlDocument в c # .net - PullRequest
0 голосов
/ 01 июня 2018

Я нашел некоторый код для сериализации классов в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...