Хорошо, это сделал! Спасибо всем вам!
public class Result
{
public String htmlEscaped
{
set;
get;
}
[XmlIgnore]
public String htmlValue
{ set; get; }
[XmlElement("htmlValue")]
public XmlCDataSection htmlValueCData
{
get
{
XmlDocument _dummyDoc = new XmlDocument();
return _dummyDoc.CreateCDataSection(htmlValue);
}
set { htmlValue = (value != null) ? value.Data : null; }
}
}
Result r = new Result();
r.htmlValue = ("<b>Hello</b>");
r.htmlEscaped = ("<b>Hello</b>");
XmlSerializer xml = new XmlSerializer(r.GetType());
TextWriter file = new StreamWriter(Environment.CurrentDirectory + "\\results\\result.xml", false, System.Text.Encoding.Default);
xml.Serialize(file, r);
file.Close();
РЕЗУЛЬТАТ:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlEscaped><b>Hello</b></htmlEscaped>
<htmlValue><![CDATA[<b>Hello</b>]]></htmlValue>
</Result>
Как видите, после того, как CDATA имеет возвращаемый тип, больше нет экранированного html в XML-файле в файловой системе.
Сериализация JSON больше не работает, но это можно исправить с помощью небольшого расширения типа.
ВОПРОС БЫЛ:
Может быть, кто-то знает, как заставить это сделать ...
У меня есть этот класс:
public class Result
{
public String htmlValue
{
get;
set;
}
}
Я использую это для сериализации в XML
Result res = new Result();
res.htmlValue = "<p>Hello World</p>";
XmlSerializer s = new XmlSerializer(res.GetType());
TextWriter w = new StreamWriter(Environment.CurrentDirectory + "\\result.xml", false, System.Text.Encoding.Default);
s.Serialize(w, res);
w.Close();
Работает нормально, я получаю это:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlValue><b>Hello World</b></htmlValue>
</Result>
Что я могу изменить, чтобы получить это:
<?xml version="1.0" encoding="Windows-1252"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
</Result>
Я уже искал, но ничего не могу найти. Тип htmlValue
должен остаться String из-за других сериализаций JSON и т. д.
Хитрый ... Заранее спасибо за предложения
- HTML верен в строке в C #. Зачем декодировать или кодировать?
- XmlSerializer сохранил экранированный HTML-файл в файл XML.
- Не используйте C # для потребления.
Это внешний инструмент, который принимает это:
<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
но не
<htmlValue><b>Hello World</b></htmlValue>
Я делаю то же самое с JSON Serializer, в файле на жестком диске HTML-код сохраняется правильно.
Почему и где использовать HTTP Utility, чтобы предотвратить это? И как обойти <![CDATA[ ]]>
.
Можете ли вы привести пример кода?
Есть ли другой сериализатор, кроме собственного C #?
Я нашел эту ссылку .NET XML-сериализация CDATA ATTRIBUTE от Marco André Silva, что мне нужно сделать, но по-другому, как включить это без изменения типов?