2016-03-11 35 views
7
public string Serialize(BackgroundJobInfo info) 
{ 
    var stringBuilder = new StringBuilder(); 
    using (var stringWriter = new StringWriter(stringBuilder, CultureInfo.InvariantCulture)) 
    { 
     var writer = XmlWriter.Create(stringWriter); 
     ... 

Theo mặc định, StringWriter sẽ tự quảng cáo là ở số UTF-16. Thông thường, XML nằm trong số UTF-8. Vì vậy, tôi có thể sửa lỗi này bằng subclassing StringWriterTôi có nên lo lắng về mã hóa trong quá trình tuần tự hóa không?

public class Utf8StringWriter : StringWriter 
{ 
    public override Encoding Encoding 
    { 
     get { return Encoding.UTF8; } 
    } 
} 

Nhưng tại sao tôi nên lo lắng về điều đó? Điều gì sẽ xảy ra nếu tôi quyết định sử dụng StringWriter (như tôi đã làm) thay vì Utf8StringWriter? Tôi sẽ có một số lỗi?

Sau đó tôi sẽ viết chuỗi này để Encoding tài sản MongoDb

+0

Do câu trả lời cho câu hỏi trợ giúp này? http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8 –

Trả lời

3

StringWriter 's thực sự không phải là hữu ích, là điều cơ bản nó ghi vào là một StringBuilder, trong đó sản xuất một Net string. Các chuỗi .Net được mã hóa nội bộ trong utf16, nhưng đó là một chi tiết triển khai mà bạn không phải lo lắng. Encoding chỉ là một thuộc tính được kế thừa từ TextWriter, bởi vì TextWriter có khả năng ghi vào các mục tiêu trong đó mã hóa không thành vấn đề (Stream, byte[], ...).

Cuối cùng, bạn sẽ kết thúc bằng một số cũ là string. Mã hóa bạn sẽ sử dụng để tuần tự hóa chuỗi đó sau này chưa được sửa, và nếu bạn đang sử dụng một máy khách MongoDb thực hiện lấy một chuỗi làm đối số, nó thậm chí không phải là mối quan tâm của bạn!


Trên một mặt lưu ý, trọng getter của Encoding bất động sản sẽ không thay đổi mã hóa đường sẽ xảy ra bên trong ngay cả khi mã hóa được thực sự tham gia vào StringWriter

Các vấn đề liên quan