当我尝试使用包含斜杠/的字符串属性序列化对象时,生成的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();
            }
        }
    }

最佳答案

您在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不允许标记内的字符串包含</”),因为在JavaScript的客户端'\/' === '/'中。因此,您不必担心。

10-05 20:49
查看更多