Deserializacja Xml, format odczytu.

0

Witam.
Mam Forme która ma serializować zawartość TextBoxa do pliku .xml podczas zamykania Formy. I tak się dzieje. Tak wygląda plik .xml

''** <?xml version="1.0" encoding="utf-8"?>
<XMLCust xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CustName>1
22
333

555555</CustName>
</XMLCust> **''

Ale gdy do TextBoxa wpiszę tekst w kilku liniach, to podczas deserializacji gdy otwieram Formę, w TextBoxie mam wszystko wypisane w jednej lini bez spacji.

**22333555555**

Co odpowiada za prawidłowe formatowanie odczytu, albo czy muszę podać jakieś argumenty?

0

A pokaż fragment kodu którym serializujesz te dane i który potem deserializujesz? Tak może będzie prościej wskazać błąd.

0

Główna Forma:

private void MainForm_Load(object sender, EventArgs e)
        {
            XMLCust customer = new XMLCust();
            customer = (XMLCust)XMLObj.Load(customer, null, XMLName, null);
            this.tBCust.Text = customer.CustName;
        }
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            XMLCust customer = new XMLCust();
            customer.CustName = this.tBCust.Text;
            XMLObj.Save(customer, null, XMLName, null);
            MessageBox.Show("Dane zostały zapisane do pliku .Xml!");
        } 

Klasa XMLCust

 public class XMLCust
    {
        public string CustName { get; set; }
        public XMLCust() { }
        public XMLCust(string Name)
        {
            CustName = Name;
        }
    }

Klasa

 class XMLObj
    {
        private XMLObj()
        {}

        public static Object Load(Object serializableObject, Type[] extraTypes, string path, IsolatedStorageFile isolatedStorageFolder)
        {
            using (TextReader textReader = CreateTextReader(isolatedStorageFolder, path))
            {
                XmlSerializer xmlSerializer = CreateXmlSerializer(serializableObject, extraTypes);
                serializableObject = xmlSerializer.Deserialize(textReader);
            }
            return serializableObject;
        }

        public static void Save(Object serializableObject, Type[] extraTypes, string path, IsolatedStorageFile isolatedStorageFolder)
        {
            using (TextWriter textWriter = CreateTextWriter(isolatedStorageFolder, path))
            {
                XmlSerializer xmlSerializer = CreateXmlSerializer(serializableObject, extraTypes);
                xmlSerializer.Serialize(textWriter, serializableObject);
            }
        }

        private static TextReader CreateTextReader(IsolatedStorageFile isolatedStorageFolder, string path)
        {
            TextReader textReader = null;
            if (isolatedStorageFolder == null)
                textReader = new StreamReader(path);
            else
                textReader = new StreamReader(new IsolatedStorageFileStream(path, FileMode.Open, isolatedStorageFolder));
            return textReader;
        }

        private static TextWriter CreateTextWriter(IsolatedStorageFile isolatedStorageFolder, string path)
        {
            TextWriter textWriter = null;
            if (isolatedStorageFolder == null)
                textWriter = new StreamWriter(path);
            else
                textWriter = new StreamWriter(new IsolatedStorageFileStream(path, FileMode.OpenOrCreate, isolatedStorageFolder));
            return textWriter;
        }

        private static XmlSerializer CreateXmlSerializer(Object serializableObject, System.Type[] extraTypes)
        {
            Type ObjectType = serializableObject.GetType();
            XmlSerializer xmlSerializer = null;
            if (extraTypes != null)
                xmlSerializer = new XmlSerializer(ObjectType, extraTypes);
            else
                xmlSerializer = new XmlSerializer(ObjectType);
            return xmlSerializer;
        }
    }

No i niby wszystko się mieli, ale nie tak jak bym chciał, a chodzi głównie o prawidłowy format po deserializacji.
Z góry dzięki za podpowiedzi i poprawki.

0

Może spróbuj wymusić konkretne kodowanie w momencie tworzenia StreamReader i StreamWriter. Ja kiedyś miałem podobny problem w Javie, kiedy nie wczytywało się wszystko poprawnie, dopóki nie ustawiłem jawnie kodowania na zapis i odczyt. Czyli u Ciebie byłoby to mniej więcej tak:

new StreamReader(path, Encoding.UTF8);

oraz

new StreamWriter(path, Encoding.UTF8);

Analogicznie oczywiście dla wersji kiedy parametr isolatedStorageFolder jest różne null

0

No niestety bez zmian. A na dodatek argument:

textWriter = new StreamWriter(path, Encoding.UTF8); 

wyrzuca wyjątek:
Error 1 The best overloaded method match for 'System.IO.StreamWriter.StreamWriter(string, bool)' has some invalid arguments
oraz
Error 2 Argument 2: cannot convert from 'System.Text.Encoding' to 'bool'

0

Widzę, że poszedłem za szybko na skróty, a Ty też nie sprawdziłeś mnie. Powinno być new StreamWriter(path, false, Encoding.UTF8); Ewentualnie zamiast false robisz true w zależności od tego czy chcesz dopisywać na koniec pliku to co serializujesz (wtedy true), albo jeśli chcesz za każdym razem czyścić plik przed zapisem, wtedy false.

Poza tym jeśli nadal masz problem, to brak pomysłów co może być nie tak. Może po prostu inne kodowanie ustaw?

0

Przy true do pliku .xml wprawdzie są dopisywane dane, ale wtedy plik przy uruchamianiu wysypuje się.
Jak jest false - to tak jak by go nie było. Plik uruchamia się, ale dalej brak jest odczytu z prawidłowym formatowaniem.
Muszę poszperać w necie czy plik .xml jest prawidłowo zapisywany, może tu jest buba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1