XmlSerializer che lavora con encoding utf-8

mercoledì 02 agosto 2006 - 17.49

Pinky Profilo | Junior Member

.NET 2.0
Ho un metodo pubblico di un Web service che recupera i dati dal DB e dopo averli serializzati in un oggetto restituisce la stringa contenente l' XML.
Tale stringa è ottenuta Serializzando tale oggetto:

[CODE]public static string SerializeProductDocument(ProductDocument productDocument) { XmlSerializer serializer = new XmlSerializer(typeof(ProductDocument)); // MemoryStream version MemoryStream stream = new MemoryStream(); XmlWriter xWriter = new XmlTextWriter(stream, Encoding.UTF8); StreamReader reader = new StreamReader(stream); //serializer.Serialize(stream, productDocument); // non scrive "encoding='utf-8'" serializer.Serialize(xWriter, productDocument); stream.Seek(0, SeekOrigin.Begin); string xmlString = reader.ReadToEnd(); stream.Close(); reader.Close(); return xmlString; }[/CODE]

Questo restituisce:
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://www.pippo.it/service/">[b]<?xml version="1.0" encoding="utf-8"?>[/b]<ProductDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ecc... ecc..


Invece vorrei usare una cosa del tipo:
[CODE]public static string SerializeProductDocument(ProductDocument productDocument) { XmlSerializer serializer = new XmlSerializer(typeof(ProductDocument)); // StringBuilder version StringBuilder sb = new StringBuilder(); TextWriter tWriter = new StringWriter(sb); XmlWriter xWriter = new XmlTextWriter(tWriter); serializer.Serialize(xWriter, productDocument); xWriter.Flush(); tWriter.Flush(); tWriter.Close(); xWriter.Close(); return sb.ToString(); }[/CODE]

che però mi restituisce:
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://www.pippo.it/service/">[b]<?xml version="1.0" encoding="utf-16"?>[/b]<ProductDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ecc... ecc...

Ovvero vorrei che l'oggetto string "Literal" contenuto nella risposta SOAP abbia l'encoding UTF-8 ma questo non mi è possibile impostarlo se al metodo .Serialize dell' XmlSerializer passo un XmlWriter, mentre è possibile se gli passo uno Stream.

( Facendo dei test il metodo con lo StringBuilder viene eseguito in circa 2 millisecondi mentre con il Memorystream ho circa 5 millisecondi. Quindi è solo un problema "concettuale", non di prestazioni)

Come altrimenti posso fare ?

Grazie, Alessandro.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5