Phương thức WriteObject
của DataContractSerializer có quá tải ghi vào Stream
hoặc đến XmlWriter
(và XmlDictionaryWriter
). Quá tải Stream
sẽ mặc định là UTF-8, vì vậy bạn sẽ cần phải sử dụng thiết bị khác. Sử dụng một thể hiện XML Writer ghi XML trong UTF-16 làm những gì bạn cần, vì vậy bạn có thể làm những gì @Phil đề xuất, hoặc bạn có thể sử dụng tác giả trả về XmlDictionaryWriter.CreateTextWriter
mà bạn chuyển một tham số Encoding.Unicode
.
public class StackOverflow_10089682
{
[DataContract(Name = "Person", Namespace = "http://my.namespace")]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
public static void Test()
{
MemoryStream ms = new MemoryStream();
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.Unicode);
DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
Person instance = new Person { Name = "John Doe", Age = 33 };
dcs.WriteObject(writer, instance);
writer.Flush(); // Don't forget to Flush the writer here
Console.WriteLine("Decoding using UTF-16: {0}", Encoding.Unicode.GetString(ms.ToArray()));
}
}
Liên kết này có thể giúp bạn: http://sedodream.com/CategoryView,category,DataContractSerializer.aspx – Rajesh