在JSON.NET中编码umlauts

4

在JSON.NET中,是否可能对带有umlauts的字符串进行编码,以便序列化后的字符串被编码为以下格式?

"Pläne" => "Pl\u00e4ne"

更新: 在sra的回答之后,我想到了以下代码,它对我有效。

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();
        }



    }
1个回答

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
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接