2010-09-23 12 views
5

Próbuję serializować obiekt i znak \ 0 (zerowy) jest dołączany do wygenerowanego łańcucha. Czemu?Serializacja Xml dołączająca znak 0 (backslash 0 lub Null)?

Mój kod:

XmlSerializer serializer = new XmlSerializer(typeof(Common.PlanogramSearchOptions)); 
MemoryStream memStream = new MemoryStream(); 
serializer.Serialize(memStream, searchOptions); 

string xml = Encoding.UTF8.GetString(memStream.GetBuffer()); // appends \0 

Moja praca wokół jest zastąpienie Null znak z pustym ciągiem

xml.Replace("\0", string.Empty) 

dzięki.

Odpowiedz

10

MemoryStream.GetBuffer() zwraca bazowy bufor MemoryStream (który jest większy niż rzeczywiste dane w nim przechowywane). Chcesz MemoryStream.ToArray().

Jednakże, polecam użyć StringWriter zamiast MemoryStream, dzięki czemu można uniknąć konwersji UTF-8:

XmlSerializer serializer = new XmlSerializer(typeof(PlanogramSearchOptions)); 
StringWriter writer = new StringWriter(); 
serializer.Serialize(writer, searchOptions); 
string xml = writer.ToString(); 

Patrz także: Serialize an object to string

+0

Doskonała! To zadziałało i dziękuję za sugestię ... zaimplementuję to we wszystkich dziedzinach. Dziękuję Ci. –

+0

Dzięki. Używałem MemoryStream.GetBuffer, kiedy miałem na myśli ToArray w innym kontekście. W końcu znalazłem tu swoją drogę. :) – Greg

Powiązane problemy