C# 带有双转义字符的序列化JSON
当我试图用包含斜杠的string属性序列化对象时,JSON生成的每个斜杠转义两次C# 带有双转义字符的序列化JSON,c#,json,serialization,escaping,C#,Json,Serialization,Escaping,当我试图用包含斜杠的string属性序列化对象时,JSON生成的每个斜杠转义两次 示例: 随机类别: public class Foo { [DataMember(Name = "bar"] public string Bar { get; set; } } 及 JSON将是: { \"bar\":\"Foo \\/ Bar\" } 其结果是: { "bar":"Foo \/ Bar" } 然而,我只想: { "bar":"Foo / Ba
示例: 随机类别:
public class Foo
{
[DataMember(Name = "bar"]
public string Bar { get; set; }
}
及
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();
}
}
}
您在VisualStudio中看到过这样的JSON吗?因为我相信这样是可以的,而实际值不会有转义字符 乐:经过测试,你是对的 我认为一种解决方法可能是在字符串之后进行替换调用,如下所示:
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不允许标记中的字符串包含序列化程序执行此操作,并且没有关闭它的选项。它是有效的JSON,因此转义时是否存在问题?问题是斜杠转义两次。我必须补充一个事实,即它是自动完成的(正向斜杠不会转义)要处理结束标记-“/>”(我引用-“HTML不允许标记内的字符串包含所有反斜杠,主要问题是删除原始字符串中的反斜杠。但是,我可以将替换\/
的问题限制为/
。这也是一个解决方案!
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("\\", "");
}
}