» »

c# .NET XML serializacija je uspešna, deserializacija pa ne?

c# .NET XML serializacija je uspešna, deserializacija pa ne?

c00L3r ::

Torej pišem en programček v C# in sem se odločil uporabit kar .NET serializacijo. Da lahko objektni model shranim v lepi XML obliki in po potrebi spet preberem iz datoteke nazaj v objektni model.

Podatki se lepo serializirajo in ustvari se XML datoteka. Ko pa jih hočem prebrat pa dobim napako " hexadecimal value 0x04, is an invalid character". Včasih je tudi kateri drug znak nepravilen.

Pojavi se vprašanje, kako lahko .NET uspešno izvede serializacijo. Ko pa mora spet prebrat datoteko pa ima not neveljavne znake? Saj pa sem uporabil avtomatski serializer, ki sam pretvori objeknti model v XML.

Delal sem po tem primeru.

darkolord ::

Najboljš da kar pokažeš kodo.

c00L3r ::

V tem projektu gre za to, da z ene spletne strani pobiram kar zajetno število podatkov, ki jih shranim v objektni model. Nato pa tega z .NET XML serializacijo shranim.

Podatkov je nekje za 10Mb v XML datotekah, tako da ročno pregledovanje odpade. Sem pa ugotovil vzorec, ki se pojavlja. Gre za znake
   ...


Moja trenutna rešitev je takšna, da preden procesiram XML, pač te znake odstranim:
const string specialCode = "&#x";
const string podpicje = ";";
for (int i = 0; i < 255; i++)
{
  string code = specialCode + i.ToString("X") + podpicje;
  vsebina = Regex.Replace(vsebina, code, string.Empty);
}


Koda za XML serializacijo:
public static GameCollection readGames(string fileName)
        {
            GameCollection gameCollection = null;
            XmlSerializer serializer = new XmlSerializer(typeof(GameCollection));
            TextReader tr = new StreamReader(new FileStream(fileName, FileMode.Open));
            gameCollection = (GameCollection)serializer.Deserialize(tr);
            tr.Close();
            return gameCollection;
        }


        public static bool writeGames(GameCollection gameCollection )
        {
            XmlSerializer serializer = new XmlSerializer(typeof(GameCollection));
            TextWriter tw = new StreamWriter(new FileStream("games.xml", FileMode.Create));
            serializer.Serialize(tw, gameCollection );
            tw.Close();
            return true;
        }


Čudi me to, da je .NET serializer čist OK, pa nič ne teži ko serializira. Ko pa takoj za tem berem isti XML, pa teži za znake, ki jih je "sam dal not".

Zgodovina sprememb…

  • spremenil: c00L3r ()

LeQuack ::

Probaj tako:

XmlSerializer serializer = new XmlSerializer(typeof(GameCollection));
TextReader tr = new StreamReader(new FileStream(fileName, FileMode.Open));
gameCollection = (GameCollection)serializer.Deserialize(new System.Xml.XmlTextReader(tr));
Quack !