2010-09-15 2 views
3

Я ве пытался в несколько различных способов, чтобы получить XmlSerializer.Deserialize вернуть нулевой однако не кажется возможнымМожет ли XmlSerializer.Deserialize возвращать null?

Я попытался с классом существо Null, malformated XML, хорошо отформатирован XML.

Возможно, у меня может быть что-то очевидное, но возможно ли это?

Просто для уточнения дать класс MyClass, который сериализуемый я хочу подобное испытание на следующее пройти

[Fact] //this is a the test attribute when using xUnit 
public void When_xml_Something_Then_serialize_returns_null() 
{ 
    string serializedObject = "<?xml version=\"1.0\" encoding=\"utf-8\"?><MyClass xmlns:xsi=\"http://www.w3asdsadasdasd.org/2001/XMLSchema-instance\"></MyClass>"; 
    using (var stringReader = new StringReader(serializedObject)) 
    { 
     Assert.Null(new XmlSerializer(typeof(MyClass)).Deserialize(stringReader)); 
    } 
} 

Пробовал разные вещи в последовательной строке, и я либо получает исключение или пустой экземпляр MyClass :( Благодарности Примечание: была опечатка в этом вопросе, то теперь исправлено

Примечание 2:. для более подробного ответа смотреть на комментарии

+0

О каком методе вы имеете в виду? XmlSerializer.Serialize возвращает void, поэтому он не может возвращать значение null. – Sjoerd

+0

Проклятый, я имею в виду Deserialize – roundcrisis

+0

Так как же вы тогда прошли тест единицы? –

ответ

11

Да, Deserialize может возвращать значение null, когда вход не содержит ожидаемого XML. Это часто наблюдается при путанице пространств имен XML. Если вход содержит корневой элемент с ожидаемым именем, но в другом пространстве имен, то возвращается null.

Это часто наблюдается при работе с веб-службами ASMX или с веб-ссылки, особенно веб-ссылок в отношении служб RPC-стиля, где сообщения описаны в терминах XSD type сообщения, а не в терминах element ,

+0

Вы правы (моя опечатка), исправить вопрос – roundcrisis

+0

попробовал несколько разных вещей в пространстве имен, а тест выше провалился, какие-то подсказки? – roundcrisis

+0

Поместите '[XmlRoot (Namespace =" http://example.org ")]' на 'MyClass' и повторите попытку. –

0

Внешний вид: Вы можете view или download код для System.Xml части .NET framework. Это позволяет вам посмотреть исходный код, чтобы определить, когда он возвращает значение null.

Смежные вопросы