Как десериализовать XML в DataContract, если в XML удалены пространства имен?

Я сериализую свои wcf-запросы и ответы в XML, но для экономии места в базе данных я удаляю всю несущественную информацию, поэтому получается:

<someObject>
  <someValue>10</someValue>
</someObject>

Существуют более сложные вложенные свойства, приведенный выше пример.

Когда я пытаюсь десериализовать, я получаю сообщение об ошибке someObject, someNamespace но столкнулся someObject, ''

byte[] data = System.Text.Encoding.UTF8.GetBytes(xmlString);
stream.Write(data, 0, data.Length);
stream.Position = 0;
DataContractSerializer deserializer = new DataContractSerializer(typeof(T));
return deserializer.ReadObject(stream) as T;

Есть ли простой способ решить эту проблему? Возможно, не используя DataContractSerializer?

1 ответ

Я знаю, что этому посту почти неделя, но он может кому-то помочь, если вы уже нашли решение.

Если вы знаете структуру заранее, вы можете использовать класс XmlSerializer.

string xml = "<someObject>" +
             "  <someValue>10</someValue>" +
             "</someObject>";

using (TextReader reader = new StringReader(xml))
{
    XmlSerializer serializer = new XmlSerializer(typeof(someObject));
    var obj = serializer.Deserialize(reader);

}

Вот вспомогательный класс для десериализации его в:

[Serializable()]
public class someObject
{
    [XmlElement("someValue")]
    public string someValue { get; set; }
}

Для более сложного XML вам придется изменить класс, который вы используете. Вы можете вкладывать классы, а также поддерживать массивы / списки.

Другие вопросы по тегам