Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# 带有符号的ASP.NET Web api序列化对象\n_C#_Asp.net_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# 带有符号的ASP.NET Web api序列化对象\n

C# 带有符号的ASP.NET Web api序列化对象\n,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我正在检索类实例作为rest端点的响应。这是我的示例类: public class Sample { public string SomeThing {get;set;} } 而SomeThing字段包含下一个字符串=“SomeText\n MoreText” 但当我调用该端点作为结果时,我得到下一个结果: {SomeThing:"SomeText \\n MoreText"} 我知道webapi会自动保存潜在的注入。但我想阻止屏蔽\n符号。如何以正确的方式做这件事 您需要转义字符

我正在检索类实例作为rest端点的响应。这是我的示例类:

public class Sample
{
     public string SomeThing {get;set;}
}
SomeThing
字段包含下一个字符串=
“SomeText\n MoreText”

但当我调用该端点作为结果时,我得到下一个结果:

{SomeThing:"SomeText \\n MoreText"}
我知道webapi会自动保存潜在的注入。但我想阻止屏蔽
\n
符号。如何以正确的方式做这件事

您需要转义字符串中的“\”(将其转换为双精度-“\”),否则它将成为JSON源中的换行符,而不是JSON数据

发件人:

除以下情况外,所有Unicode字符都可以放在引号内 对于必须转义的字符:引号,反转 solidus和控制字符(U+0000到U+001F)


因为换行符是一个控制字符,所以必须对其进行转义。

这与“防止注入”无关,因为这只是JSON应该如何序列化/反序列化

以下步骤描述了为什么您看到的是正确的行为:

一,。在C#变量中,有以下内容:

"SomeText \n MoreText"
二,。当您的对象被序列化时,您将得到以下内容(这只是一个C#字符串,引号和反斜杠被转义):

三,。一旦JSON被发送到客户端(例如浏览器),它将如下所示:

// Notice the C# backslash and quotes escaping is no longer there
{"SomeThing":"SomeText \n MoreText"}
四,。一旦JSON被反序列化(例如使用JavaScript的JSON.parse),您的对象将如下所示:

var myobject = {
    SomeThing:"SomeText \n MoreText"
}
之所以有
\n
,是因为在第一步中,您说希望在那里有一个换行符,所以当您打印某物的值时,\n会被读取为换行符。例如,如果在浏览器的控制台中打印
某物
,您会看到:

>> console.log(myobject.Something)

SomeText 
 MoreText
现在,如果您在第2步之后删除了
\\n
,然后在第3步中打印json,您将得到以下结果:

{"SomeThing":"SomeText n MoreText"}
在步骤4中:

var myobject = {
    SomeThing:"SomeText n MoreText"
}
在打印
myobject的内容时,会出现以下情况:

>> console.log(myobject.Something)

SomeText n MoreText

替换结果中的所有
\\n
怎么样?我的对象比我在问题中提到的更复杂,我相信有更好的方法使用序列化程序设置。
>> console.log(myobject.Something)

SomeText n MoreText