さて、これはそれをやった!皆さんのお陰で!
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 が戻り値の型になった後、ファイルシステムの XML ファイルでエスケープされた html はなくなりました。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 の型は、他のシリアライゼーション JSON などのため、文字列のままにする必要があります。
トリッキーなもの...提案を事前にありがとう
- HTML は C# 内の String で正しいです。デコードまたはエンコードする理由
- XmlSerializer は、HTML をエスケープして XML ファイルに保存しました。
- 消費に C# を使用しないでください。
これを受け入れる外部ツールは次のとおりです。
<htmlValue><![CDATA[<b>Hello World</b>]]></htmlValue>
だがしかし
<htmlValue><b>Hello World</b></htmlValue>
JSONシリアライザーでも同じことを行います。ハードドライブ上のファイルでは、HTMLが正しく保存されます。それを防ぐために HTTP ユーティリティを使用する理由と場所は? そして、それを<![CDATA[ ]]>
回避する方法。
コードサンプルを教えてください。C# 独自のもの以外のシリアライザーはありますか?
この Link .NET XML Serialization of CDATA ATTRIBUTEを Marco André Silva から見つけました。これを行う必要がありますが、タイプを変更せずにこれを含める方法は異なりますか?