簡體   English   中英

屬性中包含無效字符的XML序列化和反序列化對象

[英]XML serialization and deserialization objects containing invalid chars in properties

我知道這已經被問過很多次了,但是仍然沒有一個好的解決方案。
有一個這樣的對象:

public class DTO
{
    public string Value;
}

我需要在導出器應用程序中對其進行序列化,然后在導入器中進行反序列化。
對象的值可能包含對XML無效的字符(例如0x8)。 我需要讓Exporter刪除此類字符,或者讓Importer成功加載包含字符的對象。 我不想在序列化之前清理對象,因為我有數十個對象,每個對象都有數十個字符串屬性。

  1. 進口商方。 如果我在此處啟用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(); } 
  2. 好的,如果我讓無效的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM