当我尝试使用包含斜杠/
的字符串属性序列化对象时,生成的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();
}
}
}
答案 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中的客户端</
。所以你不必担心它。