あなたが見ている問題はほとんど知られていないと思いますが、XMLの非常に深刻な欠陥です。簡単に言うと、xml値に特定の文字を含めることはできません。また、xmlテキストに含めることはできないだけでなく、&#DDDD;を使用してエスケープすることもできません。表記。
有効なXML文字セットはここにあります:http ://www.w3.org/TR/REC-xml/#charsets 、そしてそれは:#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]。
つまり、文字列にこの文字セットに含まれていない文字が含まれている場合、XML値にシリアル化することはできません。このような文字列を保存する唯一の方法は、バイナリデータとしてbase64にシリアル化することです。
MSXMLや.NETを含む多くの一般的なフレームワークでは、不正なデータをXML値に入れることができ、そのようなXMLの逆シリアル化を拒否します。次に、スクリーンショットの例を示します:http: //vvcap.net/db/Db94W-13uwCkNXSZTitO.htp、およびソースコード:
using System;
using System.Xml.Serialization;
using System.Xml;
[Serializable] public class TestClass
{
[XmlAttribute]
public string Member { get; set; }
}
class Program
{
static void Main(string[] args)
{
var ser = new XmlSerializer(typeof(TestClass));
var tc = new TestClass() { Member = "zzz \x19 zzz" };
var stream = new System.IO.StringWriter();
ser.Serialize(stream, tc);
var xml = stream.ToString();
var stream2 = new System.IO.StringReader(stream.ToString());
var tc2 = ser.Deserialize(stream2);
}
}