Десериализация xml с новыми атрибутами
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 10.11.21 18:22
Оценка:
Приветствую.
Есть входящая XML, которую я успешно десеарилизую:
var xs = new XmlReaderSettings
{
    IgnoreWhitespace = true,
    ConformanceLevel = ConformanceLevel.Fragment,
    //ProhibitDtd = false,
    DtdProcessing = DtdProcessing.Parse
};

var xr = XmlReader.Create(new System.IO.StringReader(data), xs);

var client = (XmlClient.Client)new XmlSerializer(typeof(XmlClient.Client)).Deserialize(xr);


Входящая XML может не иметь некоторых атрибутов и это успешно обрабатывается Deserialize, который оставляет эти пол null в созданном объекте client.
Проблема в том, что если наоборот, XML имеет атрибуты не описанные в XmlClient.Client, то мне никто ничего не говорит.
Как заставить это дело кидать ошибки в этом случае? В XmlReaderSettings не нашёл такой конфигурации или плохо искал?
Вселенная бесконечна как вширь, так и вглубь.
Re: Десериализация xml с новыми атрибутами
От: ksg71 Германия  
Дата: 10.11.21 21:08
Оценка:
Здравствуйте, Real 3L0, Вы писали:

R3>Приветствую.

R3>Есть входящая XML, которую я успешно десеарилизую:
R3>
R3>var xs = new XmlReaderSettings
R3>{
R3>    IgnoreWhitespace = true,
R3>    ConformanceLevel = ConformanceLevel.Fragment,
R3>    //ProhibitDtd = false,
R3>    DtdProcessing = DtdProcessing.Parse
R3>};

R3>var xr = XmlReader.Create(new System.IO.StringReader(data), xs);

R3>var client = (XmlClient.Client)new XmlSerializer(typeof(XmlClient.Client)).Deserialize(xr);
R3>


R3>Входящая XML может не иметь некоторых атрибутов и это успешно обрабатывается Deserialize, который оставляет эти пол null в созданном объекте client.

R3>Проблема в том, что если наоборот, XML имеет атрибуты не описанные в XmlClient.Client, то мне никто ничего не говорит.
R3>Как заставить это дело кидать ошибки в этом случае? В XmlReaderSettings не нашёл такой конфигурации или плохо искал?

xmlvalidatingreader
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re: Десериализация xml с новыми атрибутами
От: Xander Zerge Россия www.zerge.com
Дата: 10.11.21 21:19
Оценка: +1
Здравствуйте, Real 3L0, Вы писали:

R3>Входящая XML может не иметь некоторых атрибутов и это успешно обрабатывается Deserialize, который оставляет эти пол null в созданном объекте client.

R3>Проблема в том, что если наоборот, XML имеет атрибуты не описанные в XmlClient.Client, то мне никто ничего не говорит.
R3>Как заставить это дело кидать ошибки в этом случае? В XmlReaderSettings не нашёл такой конфигурации или плохо искал?

XML-схему надо делать, так или иначе. И передавать её в XmlReaderSettings.Schemas, а в XmlReaderSettings.ValidationType ставить ValidationType.Schema.
Серёжа Новиков,
программист
Re: Десериализация xml с новыми атрибутами
От: bnk СССР http://unmanagedvisio.com/
Дата: 10.11.21 22:07
Оценка: 8 (2) +1
Здравствуйте, Real 3L0, Вы писали:

R3>Как заставить это дело кидать ошибки в этом случае? В XmlReaderSettings не нашёл такой конфигурации или плохо искал?


UnknownElement, UnknownAttribute:

var serializer = new XmlSerializer(typeof(XmlClient.Client));

serializer.UnknownElement += (sender, e) => {
  ...
};

serializer.UnknownAttribute += (sender, e) =>
{
  ....
};
Re[2]: Десериализация xml с новыми атрибутами
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 10.11.21 22:23
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>UnknownElement, UnknownAttribute:


Отлично! То что надо, без оверхеда со схемами.
Вселенная бесконечна как вширь, так и вглубь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.