H.W*_*per 22 c# xml wcf stream xml-serialization
当我遇到它时,我感到很惊讶,并编写了一个控制台应用程序来检查它,并确保我没有做任何其他事情.
有谁能解释一下?
这是代码:
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; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是结果:
ObjectToXmlViaStringBuilder
<?xml version="1.0" encoding="utf-16"?>
<!DOCTYPE Field1 SYSTEM "someObject.dtd">
<SomeObject>
<Field1>string value</Field1>
<Field2>8</Field2>
</SomeObject>
Run Code Online (Sandbox Code Playgroud)
ObjectToXmlViaStream
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Field1 SYSTEM "someObject.dtd">
<SomeObject>
<Field1>string value</Field1>
<Field2>8</Field2>
</SomeObject>
Run Code Online (Sandbox Code Playgroud)
Tho*_*que 30
当您创建XmlWriter
a时TextWriter
,XmlWriter
始终使用底层的编码TextWriter
.a的编码StringWriter
总是UTF-16,因为这就是.NET字符串在内部编码的方式.
当您创建a XmlWriter
周围时Stream
,没有为其定义编码Stream
,因此它使用在中指定的编码XmlWriterSettings
.
归档时间: |
|
查看次数: |
19883 次 |
最近记录: |