2016-03-23 25 views
2

XML Serializer kullanarak garip bir sorun yaşıyorum. Seri hale getirilen nesne grafiğinde bir Form Beslemeli (0x0C) bir dize varsa, seri hale getirici düzgün şekilde serileştirebilir, ancak seri hale getirilmiş gösterimi seri hale getiremez.XmlSerializer, aynı seri hale getirici ile serileştirilmiş XML'yi seri hale getiremez

static void Main (string[] args) 
{ 
    var original = "test\fbla"; 

    var stringBuilder = new StringBuilder(); 

    using (var writer = new StringWriter (stringBuilder)) 
    { 
    new XmlSerializer (typeof (string)).Serialize (writer, original); 
    } 
    var serialized = stringBuilder.ToString(); 


    string deserialized; 
    using (var reader = new StringReader (serialized)) 
    { 
    deserialized = (string) new XmlSerializer (typeof (string)).Deserialize (reader); 
    } 

    Console.WriteLine (deserialized); 
} 

tefrika dizedir:

<?xml version="1.0" encoding="utf-16"?> 
<string>test&#xC;bla</string> 

Deserialize çağrısı başarısız İşte

kavramının kanıtıdır. Bu, XmlSerializer'da bir hata olduğu anlaşılıyor, çünkü serileştirilmiş dizgiler iyi oluşturulmuş gibi görünüyor. Yoksa yanlış bir şey mi yapıyorum?

+0

Sadece denetleme, form beslemesi olmadan çalışır mı? – Christoph

+0

"Deserialize" hatası hakkında ek bilgi verebilir misiniz? –

cevap

2

XML'de bu karakter teknik olarak geçersizdir (iyi bir soru, yazarın bu özel durumu neden atmadığının iyi bir sorudur ... referans kaynağına bakarak, XmlWriter yerine kullanır. t karakterleri kontrol etmek?). Sen seri hale karakterleri kontrol etmek söylenenlerekörü bir XmlReader vermek gerekir: Ancak

string deserialized; 
XmlReaderSettings settings = new XmlReaderSettings(); 
// this will make the reader not barf on invalid characters 
settings.CheckCharacters = false; 
// can't just use a string reader here, otherwise the Serializer 
// will use an XmlReader with default settings 
using (var reader = XmlReader.Create(new StringReader(serialized), settings)) 
{ 
    deserialized = (string)new XmlSerializer(typeof(string)).Deserialize(reader); 
} 

- Sen/kesinlikle XML geçersiz karakterler içerebilir dizeleri seri hale getirmek için bir gereksinim varsa, bir kullanmayı düşünmelisiniz farklı serileştirme formatı (BinaryFormatter, JSON veya Protokol Tamponları, gereksinimlerinize/tüketicilere bağlı olarak akla gelir). Alt pazardaki tüketicilerin XML'de geçersiz karakterlere izin vermeleri gerektiğini bilmeleri için iyi bir yol yoktur ve bazı tüketiciler bunu yapma seçeneğine sahip olmayabilir.

+0

thx. Mükemmel cevap. – Gerhard77

+0

Yardım aldığınız için mutluyuz - bu durum sorununuzu çözmüşse, gelecekteki kullanıcıların daha kolay bir şekilde bulunmasına yardımcı olmak için onay kutusunu işaretlemeyi düşünebilirsiniz. –

İlgili konular