php xmlwriter utf-8,c# – 通过StringBuilder XmlWriter的XML序列化是utf-16,而通过Stream是utf-8?...

当我碰到它时,我感到惊讶,并写了一个控制台应用程序来检查它,并确保我没有做任何其他事情。

有人可以解释一下吗

以下是代码:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Xml;

using System.Xml.Serialization;

namespace ConsoleApplication1

{

public class Program

{

static void Main(string[] args)

{

var o = new SomeObject { Field1 = "string value", Field2 = 8 };

Console.WriteLine("ObjectToXmlViaStringBuilder");

Console.Write(ObjectToXmlViaStringBuilder(o));

Console.WriteLine();

Console.WriteLine();

Console.WriteLine("ObjectToXmlViaStream");

Console.Write(StreamToString(ObjectToXmlViaStream(o)));

Console.ReadKey();

}

public static string ObjectToXmlViaStringBuilder(SomeObject someObject)

{

var output = new StringBuilder();

var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };

using (var xmlWriter = XmlWriter.Create(output, settings))

{

var serializer = new XmlSerializer(typeof(SomeObject));

var namespaces = new XmlSerializerNamespaces();

xmlWriter.WriteStartDocument();

xmlWriter.WriteDocType("Field1", null, "someObject.dtd", null);

namespaces.Add(string.Empty, string.Empty);

serializer.Serialize(xmlWriter, someObject, namespaces);

}

return output.ToString();

}

private static string StreamToString(Stream stream)

{

var reader = new StreamReader(stream);

return reader.ReadToEnd();

}

public static Stream ObjectToXmlViaStream(SomeObject someObject)

{

var output = new MemoryStream();

var settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };

using (var xmlWriter = XmlWriter.Create(output, settings))

{

var serializer = new XmlSerializer(typeof(SomeObject));

var namespaces = new XmlSerializerNamespaces();

xmlWriter.WriteStartDocument();

xmlWriter.WriteDocType("Field1", null, "someObject.dtd", null);

namespaces.Add(string.Empty, string.Empty);

serializer.Serialize(xmlWriter, someObject, namespaces);

}

output.Seek(0L, SeekOrigin.Begin);

return output;

}

public class SomeObject

{

public string Field1 { get; set; }

public int Field2 { get; set; }

}

}

}

这是结果:

ObjectToXmlViaStringBuilder

string value

8

ObjectToXmlViaStream

string value

8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值