使用双转义字符序列化 JSON

Serialized JSON with double escape character

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


示例:

一个随机的class:

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

你在Visual Studio看到这样的JSON了吗?因为我相信这样就可以了,而实际值不会有转义符。

LE:测试过,你是对的。

我认为解决方法可能是在字符串后进行替换调用,如下所示:

        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 does not allow a string inside a tag to contain </"),因为在客户端 - JavaScript 中的 '\/' === '/' 侧。所以你不必担心。