Используйте XmlSerializer.CanDeserialize () при десериализации из строки - PullRequest
1 голос
/ 06 июня 2019

У меня есть метод, который возвращает объект из XML-файла (пожалуйста, не обращайте внимания на использование ресурсов и присвоение имен, это всего лишь пример)строка вместо файла.Я придумал что-то вроде этого (опять же, упрощенный пример)

public static T FromString<T>(string inputString)
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    T result;
    try
    {
        using (TextReader reader = new StringReader(inputString))
        {
            result = (T)serializer.Deserialize(reader);
        }
        return result;
     }
     catch //temporary solution, finally should stick to .CanDeserialize(xmlTextReader) usage
     {
         return default(T);
     }
}

Как бы я использовал .CanDeserialize () в этом случае?

1 Ответ

0 голосов
/ 06 июня 2019

Вместо использования перегрузки Deserialize(TextReader) создайте XmlReader из TextReader и используйте это XmlReader для вызовов Deserialize и CanDeserialize:

    using (TextReader reader = new StringReader(inputString))
    using (XmlReader xmlReader = XmlReader.Create(reader))
    {
        if (serializer.CanDeserialize(xmlReader))
        {
            result = (T)serializer.Deserialize(xmlReader);
        }
    }

Этот подход - как для чтения, так и для записи - также позволяет вам предоставить дополнительные настройки чтения / записи для детального управления API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...