2017-05-09 2 views
1

Ich lese diese file und verwende die System.Xml.Serialization.XmlSerializer zum Serialisieren und Deserialisieren. Leider kann ich den Inhalt der Datei in dieser Frage nicht posten, da StackOverflow sie falsch codiert.Serialisierung und Deserialisierung von Strings mit Hexadezimalzeichen

Die Deserialize-Funktion löst eine Ausnahme aus.

'', Hexadezimalwert 0x03, ist ein ungültiges Zeichen. Linie 5, Position 20.

Was mache ich falsch?

Hier ist mein Code. Auch erhältlich here

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 
using System.Xml.Serialization; 

namespace XMLTester 
{ 
    public class HexTester 
    { 
     public static void Main(string[] args) 
     { 

      var lines = File.ReadAllLines(@"..\..\HexText.txt"); ; 

      var foo = new Foo() 
      { 
       Items = new List<FooBar>() 
       { 
        new FooBar() 
        {        
         Text = lines[0]       
        } 
       } 
      }; 

      string xml = SerializeToXML(foo); 
      var objTabs = DeserializeFromXML(xml, typeof(Foo)); //This throws an error 
     } 

     static string SerializeToXML(object obj) 
     { 
      StringBuilder xml = new StringBuilder(); 
      XmlSerializer serializer = new XmlSerializer(obj.GetType()); 
      TextWriter textWriter = new StringWriter(xml); 
      serializer.Serialize(textWriter, obj); 
      textWriter.Close(); 

      return xml.ToString(); 
     } 

     static object DeserializeFromXML(string xml, Type toType) 
     { 
      XmlSerializer deserializer = new XmlSerializer(toType); 
      TextReader textReader = new StringReader(xml); 

      Object obj = deserializer.Deserialize(textReader); //This throws an error 
      textReader.Close(); 

      return obj; 
     } 

    } 

    public class Foo 
    { 
     public List<FooBar> Items { get; set; } 
    } 
    public class FooBar 
    { 
     public string Text { get; set; } 
    } 
} 
+0

Was ist der Zweck der Serialisierung einer Textdatei? –

+0

Ich bekomme nur Objekt Foo an meine Funktion übergeben. Ich gab das Beispiel, um aus der Datei zu lesen, da StackOverflow es mir nicht erlaubte, die Zeichen direkt zu posten. –

+0

Ich habe Ihren Code getestet. Ich denke, das Problem liegt in der ** Datei **. Wenn Sie die Datei direkt herunterladen, sehen Sie unsichtbare Zeichen. wenn ich den Inhalt von Google Drive kopiere, dann hat das Programm keine Ausnahmen. –

Antwort

1

0x03 (End-of-Text character) ist einfach not an allowed character in XML.

Sie müssen also clean the invalid characters, bevor Sie serialisieren oder deserialisieren.

+0

Glaubst du, dass die Codierung der Charaktere anders funktioniert? –

+0

Ich stimme zu 0x03 ist kein zulässiges Zeichen in XML. Aber ich suche nach einer Möglichkeit, das in ein gültiges Zeichen zu serialisieren. Haben Sie irgendwelche Eingaben dazu? Kann ich die Zeichenfolge vor dem Serialisieren anders codieren? –

+0

@CodingDawg: Wie wäre es damit, den serialisierten XML-Text in einen [CDATA] (https://en.wikipedia.org/wiki/CDATA) Abschnitt einzufügen (_like _) mit [XmlDocument.CreateCDataSection] (https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createcdatasection.aspx). Sehen Sie sich [serialisieren einer Zeichenfolge als CDATA mit XmlSerializer] an (http://stackoverflow.com/a/1380050/7988857). – stomtech

Verwandte Themen