Как десериализовать 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 вам придется изменить класс, который вы используете. Вы можете вкладывать классы, а также поддерживать массивы / списки.