带有双转义字符的序列化JSON

时间:2015-01-21 10:41:05

标签: c# json serialization escaping

当我尝试使用包含斜杠/的字符串属性序列化对象时,生成的JSON每个斜杠都会转义两次。


示例:

随机类:

public class Foo
{ 
    [DataMember(Name = "bar"]
    public string Bar { get; set; }
}

Foo foo = new Foo() { Bar = " Foo / Bar" };
string json = RandomStaticClass.Serialize(foo);

JSON将是:

{ 
    \"bar\":\"Foo \\/ Bar\"
}

结果是:

{ 
    "bar":"Foo \/ Bar"
}

虽然,我只想:

{ 
    "bar":"Foo / Bar"
}

有什么想法吗?谢谢:))


这是序列化对象的函数:

public static string Serialize(object instance)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(instance.GetType());
            serializer.WriteObject(stream, instance);
            stream.Position = 0;
            using (StreamReader reader = new StreamReader(stream))
            {
                return reader.ReadToEnd();
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您是否在Visual Studio中看到了这样的JSON?因为我认为这样就好了,而实际值不会有转义字符。

LE:经过测试,你是对的。

我认为解决方法可能只是在字符串后面有一个Replace调用,如下所示:

        using (MemoryStream stream = new MemoryStream())
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(instance.GetType());
            serializer.WriteObject(stream, instance);
            stream.Position = 0;
            using (StreamReader reader = new StreamReader(stream))
            {
                return reader.ReadToEnd().Replace("\\", "");
            }
        }

如果有更好的选择,我想知道它是如何处理的。

我希望这能回答你的问题。

LLE(仅当您计划在客户端使用JavaScript时):

我必须添加这样一个事实:它会像这样自动完成(正斜杠不会被转义)来处理结束标记 - />(我引用 - “HTML不允许标记内的字符串包含{ {1}}“),因为在JavaScript中的客户端</。所以你不必担心它。