Deserializacja Xml, format odczytu.

Deserializacja Xml, format odczytu.
PC
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 5 lat
  • Postów:29
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?

Lena(R)
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:98
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.

PC
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 5 lat
  • Postów:29
0

Główna Forma:

Kopiuj
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

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

Klasa

Kopiuj
 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.

Lena(R)
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:98
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:

Kopiuj
new StreamReader(path, Encoding.UTF8);

oraz

Kopiuj
new StreamWriter(path, Encoding.UTF8);

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

PC
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 5 lat
  • Postów:29
0

No niestety bez zmian. A na dodatek argument:

Kopiuj
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'

Lena(R)
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:98
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?

edytowany 1x, ostatnio: Lena(R)
PC
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 5 lat
  • Postów:29
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.