DataContractSerializer: сохранить строковый член, который является необработанным XML? - PullRequest
2 голосов
/ 01 июня 2010

Я немного неопытен с парадигмой DataContract и столкнулся с проблемой десериализации. У меня есть поле, которое является строкой, но оно содержит XML и не правильно десериализовано. У меня такое ощущение, что это связано с тем, что DCS рассматривает его как вход для сериализатора, а не как непрозрачный строковый объект.

Есть ли какой-нибудь способ пометить DataMember в коде, чтобы сказать «Эта вещь является строкой, не рассматривайте ее содержимое как xml», аналогично XmlIgnore?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 июня 2010

Что ж, эквивалент [XmlIgnore] - это просто , а не a [DataMember] для вашей собственности / поля - если вы все украшаете [DataMember] в противном случае.

Но я не понимаю, как вы могли бы указать DataContractSerializer обрабатывать свойство как непрозрачную строку и ничего больше.

Вы можете попробовать создать отдельное свойство, которое добавляет <![CDATA[ до и ]]> после строки содержимого, и сериализовать это свойство вместо вашего необработанного свойства XML (декорируя это новое свойство атрибутом [DataMember]).

Примерно так:

 public string XmlContent { get; set; }

 [DataMember]
 public string XmlContentSafe 
 { 
    get { return "<![CDATA[" + XmlContent + "]]>"; }
 }

Может быть, таким образом вы сможете обмануть DCS? (сам никогда не пробовал - просто угадаю ....)

0 голосов
/ 18 декабря 2015

Есть простой способ сделать это, просто объявите свойство с необработанным XML как XmlElement

[DataMember]
public XmlElement RawXML { private get; set; }
0 голосов
/ 01 июня 2010

Оказалось, что самый простой способ сделать это - просто преобразовать поле xml, поступающее с сервера sql, в varchar (max) при извлечении его из базы данных.

 CAST(CONVERT(XML,[RawXml],0) AS VARCHAR(MAX)) AS RawXml

В этом случае, кажется, сериализатор игнорирует его по желанию. Спасибо за помощь, хотя!

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