Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有双转义字符的序列化JSON_C#_Json_Serialization_Escaping - Fatal编程技术网

C# 带有双转义字符的序列化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

当我试图用包含斜杠的string属性序列化对象时,JSON生成的每个斜杠转义两次


示例:

随机类别:

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("\\", "");
            }
        }