当我尝试使用包含斜杠/
的字符串属性序列化对象时,生成的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的客户端'\/' === '/'
中。因此,您不必担心。