[英]Problem with Serialization/Deserialization an XML containing CDATA attribute
[英]XML serialization and deserialization objects containing invalid chars in properties
我知道這已經被問過很多次了,但是仍然沒有一個好的解決方案。
有一個這樣的對象:
public class DTO
{
public string Value;
}
我需要在導出器應用程序中對其進行序列化,然后在導入器中進行反序列化。
對象的值可能包含對XML無效的字符(例如0x8)。 我需要讓Exporter刪除此類字符,或者讓Importer成功加載包含字符的對象。 我不想在序列化之前清理對象,因為我有數十個對象,每個對象都有數十個字符串屬性。
進口商方。 如果我在此處啟用CheckCharacters,則在序列化步驟中會出現錯誤。 我看不到一種可以自定義控制所有字符串的方法。 如果禁用它,那么XML將包含無效的char。
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings { CheckCharacters = false }; XmlSerializer xmlSerializer = new XmlSerializer(typeof(DTO)); StringBuilder sb = new StringBuilder(); DTO dto = new DTO { Value = Convert.ToChar(0x08).ToString() }; using (XmlWriter xmlWriter = XmlWriter.Create(sb, xmlWriterSettings)) { xmlSerializer.Serialize(xmlWriter, dto); xmlWriter.Flush(); xmlWriter.Close(); }
好的,如果我讓無效的char進入XML,則無法在Import端處理它。 即使CheckCharacters = false,也會在Deserialize()調用中發生錯誤:
var _reader = XmlReader.Create(File.OpenText(path), new XmlReaderSettings() { CheckCharacters = false }); _reader.MoveToContent(); var outerXml = _reader.ReadOuterXml(); xmlSerializer.Deserialize(new StringReader(outerXml)); <== getting error here
有沒有一種方法可以在任一步驟中刪除無效字符,並允許對象導出/導入而沒有錯誤?
那是我的壞:(
在這里:
var outerXml = _reader.ReadOuterXml();
xmlSerializer.Deserialize(new StringReader(outerXml)); <== getting error here
xmlSerializer實際上是使用隱式創建的內部XmlReader來檢查字符。 我四個小時前要做的就是:
xmlSerializer.Deserialize(_reader);
我並不是說這是一個很好的解決方案,但是下面的代碼將在序列化時刪除非UTF8字符:
public class DTO
{
private string _value { get; set; }
public string Value
{
get { return Encoding.UTF8.GetString(_value.Select(x => (byte)((int)x)).ToArray()); }
set { _value = value; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.