Używam XmlSerializer.Serialize, a to powoduje podział linii i niepotrzebne spacje. Jak tego uniknąć?Jak serializować XML bez niepotrzebnych spacji i linii podziału? (.NET)
Odpowiedz
Być może można użyć przeciążenia akceptując XmlWriter
i skonfigurować podane XmlWriter
z instancją XmlWriterSettings
?
XmlWriterSettings
pozwala kontrolować stosowanie podziałów linii i wcięć.
void Serialize(Object o)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = false;
settings.NewLineHandling = NewLineHandling.None;
//settings.OtherProperties = values;
using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings))
{
_serializer.Serialize(writer, o);
}
}
zadziałało, dzięki –
Musiałem zmienić parametry w następujący sposób: '_serializer.Serialize (writer, o);'. Świetne rozwiązanie, dzięki! –
To ciekawe, pomyślałem, że domyślnie nie było formatowania. Właśnie próbowałem następujące i dostał żadnego formatowania:
using (var stream = new MemoryStream())
{
System.Text.Encoding encoding;
using (var writer = XmlWriter.Create(stream))
{
if (writer == null)
{
throw new InvalidOperationException("writer is null");
}
encoding = writer.Settings.Encoding;
var ser = new XmlSerializer(obj.GetType());
ser.Serialize(writer, obj);
}
stream.Position = 0;
using (var reader = new StreamReader(stream, encoding, true))
{
return reader.ReadToEnd();
}
}
w okresie próby, wrócił następujące XML:
<?xml version="1.0" encoding="utf-8"?><obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><childOne /><childTwo /><text>text1</text><text>text2</text></obj>
Może ci się bardziej podoba =) –
Taką niespójność należy zgłosić firmie Microsoft. Metoda nie może zachowywać się na różne sposoby. To zależy od CultureInfo? Lub jest to wersja .NET/Service Pack? Jeszcze nie wiem. –
Jeśli masz szansę, uruchom napisany przeze mnie kod. Korzystam z .NET 3.5 SP1. Zobaczmy, jaka jest prawdziwa różnica. –
Należy również sprawdzić, czy szeregowane zajęcia zawierają członków XML typu (jak XmlElement). Użyłem narzędzia Xsd2Code do wygenerowania klas od XSD i (w bardzo szczególnym przypadku) utworzył element typu XmlElement. Podczas serializacji ten element miał swoje własne formatowanie (dokładna identyfikacja). Nawet jeśli włączyłem (lub wyłączyłem) wcięcie XmlSerializer, nie miało to wpływu na element XmlElement.
- 1. Dlaczego Google Closure Compiler pozostawia kilka niepotrzebnych spacji lub linii?
- 2. .NET Regex, tylko numeryczne, bez spacji
- 3. Wartość atrybutu podziału XML na wielu liniach
- 4. UILabel wykrywanie linii podziału
- 5. błąd ESLint bez niepotrzebnych-trójargumentowy
- 6. Dodawanie linii podziału
- 7. Scala: Usuwanie spacji XML?
- 8. Jak zapobiegać wprowadzaniu spacji w wyniku podziału linii w kodzie HTML?
- 9. Jak serializować JObject bez formatowania?
- 10. Usuwanie linii podziału po IMG
- 11. Przycisk podziału w .NET Winforms
- 12. Formatowanie XML "standaryzujące" zakończenia linii, jak to zatrzymać? (.NET)
- 13. Jak serializować obiekt .NET do magazynu Azure Blob bez użycia pliku tymczasowego?
- 14. serializacji XML .NET i dziedziczenie
- 15. podziału String w C# bez ogranicznika (rodzaj)
- 16. Usuwanie wszystkich linii podziału i dodawanie ich po pewnym tekście
- 17. Teksty w Google Chrome zawijanie i dodawanie linii podziału
- 18. Jak Google rozpoznaje 2 słowa bez spacji?
- 19. Jak drukować zmienne bez spacji między wartościami
- 20. Jak serializować i deserializować koperty?
- 21. Uzyskiwanie nieprzetworzonej (nieokreślonej) linii poleceń w .NET
- 22. Usuwanie początkowych i końcowych spacji z elementów XML
- 23. Pytanie serializacji XML - jak serializować element, atrybut i tekst z jednego obiektu
- 24. Jak zmusić kolumny CSS3 do łamania tylko w linii podziału?
- 25. Jak serializować/dekantalizować słownik <ciąg, obiekt> do XML
- 26. Jak utworzyć dwie ramki bez spacji między nimi?
- 27. XML - dodawanie nowej linii
- 28. Jak zachować linię podziału
- 29. Jak serializować obiekt java jako atrybut xml z jacksonem?
- 30. Jak serializować/deserializować C# WCF DataContract do/z XML
Stare, ale sądzę, że różnica polega na tym, czy używasz XmlWriter lub TextWriter. Z mojego doświadczenia wynika, że XmlWriter domyślnie nie formatuje. Ma to sens, ponieważ wie, że pisze dokument, w którym formatowanie nie ma znaczenia, podczas gdy autor tekstu pisze prosty tekst. – Timothy