使用双转义字符序列化 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 中的 '\/' === '/'
侧。所以你不必担心。
当我尝试使用包含斜杠 /
的字符串 属性 序列化对象时,生成的 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 中的 '\/' === '/'
侧。所以你不必担心。