UTF-8 gibi bir nesne seri hale XML .NET
Uygun nesne imha kısaltma için kaldırıldı ama eğer bu bellekte UTF-8 olarak bir nesne kodlamak için en kolay yolu ise şok oldum. Daha kolay bir yolu yok mu olmalı?
var serializer = new XmlSerializer(typeof(SomeSerializableObject));
var memoryStream = new MemoryStream();
var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);
serializer.Serialize(streamWriter, entry);
memoryStream.Seek(0, SeekOrigin.Begin);
var streamReader = new StreamReader(memoryStream, System.Text.Encoding.UTF8);
var utf8EncodedXml = streamReader.ReadToEnd();
CEVAP
Hayır StringWriter
bir Ara MemoryStream
kurtulmak için kullanabilirsiniz. Ancak, XML güç Encoding
özelliği geçersiz kılar StringWriter
Bir kullanmanız gerekir:
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
Sonra:
var serializer = new XmlSerializer(typeof(SomeSerializableObject));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, entry);
utf8 = writer.ToString();
}
Belli ki sen-ebilmek yapmak Utf8StringWriter
içine daha genel bir sınıf kabul eden herhangi bir kodlama kurucusu - ama benim tecrübelerime göre UTF-8 bugüne kadar en çok gerekli olan "özel" kodlama için StringWriter
:)
Şimdi Jon Hanna dediği gibi, bu hala UTF-16 dahili olacak, ama muhtemelen bir noktada başka bir şey için değil, ikili veri dönüştürmek için... geçmek için gidiyoruzbuXML bildirimi "" kodlaması. utf-8 belirtmek çünkü yukarıdaki dize UTF-8 dönüştürmek bayt, ve her şey iyi olacak - kullanabilirsiniz noktası
EDİT: kısa ama tam bu göstermek için BİR örnek çalışma:
using System;
using System.Text;
using System.IO;
using System.Xml.Serialization;
public class Test
{
public int X { get; set; }
static void Main()
{
Test t = new Test();
var serializer = new XmlSerializer(typeof(Test));
string utf8;
using (StringWriter writer = new Utf8StringWriter())
{
serializer.Serialize(writer, t);
utf8 = writer.ToString();
}
Console.WriteLine(utf8);
}
public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
}
Sonuç:
<?xml version="1.0" encoding="utf-8"?>
<Test xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<X>0</X>
</Test>
"Utf-8" ne istedik, inanıyorum. ilan kodlama not
C Özel nesne seri hale getirmek için n...
Garip Jackson istisna Hazırda nesne se...
Xmlns=" almadan XML nesne seri hal...
Python JSON Ondalık bir nesne seri hal...
Hızlı ve kompakt nesne seri hale getir...