C# 带有符号的ASP.NET Web api序列化对象\n
我正在检索类实例作为rest端点的响应。这是我的示例类: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符号。如何以正确的方式做这件事 您需要转义字符
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