2016-04-03 37 views
0

我正在使用.NET XmlSerializer將xml序列化爲對象,反之亦然。 xml包含已編碼的特殊字符,例如大於和/或小於符號。當xml被序列化爲對象時,我需要那些大於/小於符號的實際轉換爲「<」或「>」,當從對象轉到xml時,我需要實際的「<」或「>」轉換成他們的編碼版本。Xml序列化/ deserealization和html字符編碼

我有一些工作/ UI在做轉換,但我正在尋找一種更好的方式來處理這個問題。我希望在實際的序列化器中會有一些參數設置,當我序列化/去實現時會這樣做。我環顧四周,並與各種編寫者/蒸汽一起玩,並傳遞給序列化程序,但找不到任何東西。

任何人都知道什麼是最好的解決方案呢?

回答

0

XmlSerializer應該是默認做的。如果不是,你可以發佈一些細節嗎?

當你序列化對象到XML,字符串值一樣<>自動逃跑 - 因爲這些字符在標籤中使用,使他們不能在元素出現轉換成&lt;&gt;

當您將XML反序列化爲對象時,它會做相反的操作,將<>放回原處。看看這個控制檯應用程序,輸出:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var myClass = new MyClass {Value = "<div>I am HTML!</div>"}; 
     var serializer = new XmlSerializer(typeof (MyClass)); 
     var xmlString = new StringBuilder(); 
     using (var writer = new StringWriter(xmlString)) 
     { 
      serializer.Serialize(writer, myClass); 
     } 
     Console.WriteLine("Serialized:"); 
     Console.WriteLine(xmlString.ToString()); 
     Console.WriteLine(); 
     using (var reader = new StringReader(xmlString.ToString())) 
     { 
      var deserializedClass = serializer.Deserialize(reader) as MyClass; 
      Console.WriteLine("Deserialized myClass.Value: " + deserializedClass.Value); 
     } 
     Console.ReadLine(); 
    } 
} 

Serialized: <?xml version="1.0" encoding="utf-16"?> <MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Value>&lt;div&gt;I am HTML!&lt;/div&gt;</Value>

Deserialized myClass.Value: <div>I am HTML!</div>