2011-05-10 123 views
4

是否可以在JSON.NET中使用变音符号来编码字符串,而序列化字符串是这样编码的?在JSON.NET中编码变音符号

“平面”=> “PL \ u00e4ne”

更新: SRA anwser后,我想出了为我工作了下面的代码。

public class Utf8Converter : JsonConverter 
    { 
     public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
     { 
      string s = (string)value; 
      s = EncodeNonAsciiCharacters(s);    
      writer.WriteValue(s); 
     } 

     public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
             JsonSerializer serializer) 
     { 
      throw new NotImplementedException(); 
     } 

     public override bool CanConvert(Type objectType) 
     { 
      return typeof(string).IsAssignableFrom(objectType); 
     } 


     private static string EncodeNonAsciiCharacters(string value) 
     { 
      StringBuilder sb = new StringBuilder(); 
      foreach (char c in value) 
      { 
       if (c == '\t') 
        sb.Append(@"\t"); 
       else if (c == '\n') 
        sb.Append(@"\n"); 
       else if (c == '\r') 
        sb.Append(@"\r"); 
       else if (c > 127) 
       { 

        string encodedValue = @"\u" + ((int)c).ToString("x4"); 
        sb.Append(encodedValue); 
       } 
       else 
       { 
        sb.Append(c); 
       } 
      } 
      return sb.ToString(); 
     } 



    } 

回答

4

是的,你可以使用自定义转换器,为您完成此

internal class CustomConverter : JsonConverter 
{ 
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     // your code 
    } 

    public override bool CanConvert(Type objectType) 
    { 
     // your code 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     // your code 
    } 
} 
+1

第一次我忘了代码... – sra 2011-05-10 17:20:17