鉴于代码:
dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
Run Code Online (Sandbox Code Playgroud)
输出如下:
"{\"Bar\":\"something\"}"
Run Code Online (Sandbox Code Playgroud)
在调试大型json文档时,很难阅读 - 使用Newtonsoft.Json的内置功能(不是正则表达式或可能破坏事物的黑客)有没有办法使输出成为一个带有valie的字符串:
{Bar: "something"}
Run Code Online (Sandbox Code Playgroud)
Rid*_*son 16
尝试 JToken.Parse 方法。我发现,即使当我在调试器中查看 JSON 对象并且它们是正确的时,当我去操作它们时,它们最终会被转换为文字(即添加反斜杠)。JToken.Parse 方法似乎避免了这种情况。
var token = JToken.Parse(text);
Run Code Online (Sandbox Code Playgroud)
所以对于原来的问题来说,它会是这样的:
dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
var token = JToken.Parse(json);
//Do stuff with token -- not json string
Run Code Online (Sandbox Code Playgroud)
就我而言,具体问题是使用 JObject.Add(json) 无法识别我的字符串是 json,而只是将整个字符串作为单个属性插入。一旦转换为 Jtoken,JSON 就会被正确解释。
dev*_*yan 10
如果在从WebApi方法返回值时发生这种情况,请尝试返回对象本身,而不是序列化对象并返回json字符串.默认情况下,WebApi会将对象序列化为响应中的json; 如果你返回一个字符串,它将转义它找到的任何双引号.
所以代替:
public string Get()
{
ExpandoObject foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
return json;
}
Run Code Online (Sandbox Code Playgroud)
尝试:
public ExpandoObject Get()
{
ExpandoObject foo = new ExpandoObject();
foo.Bar = "something";
return foo;
}
Run Code Online (Sandbox Code Playgroud)
在查看json值时在调试器中看到的是您应该在C#文件中使用以获取相同值的字符串值.
确实你可以替换
dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
Run Code Online (Sandbox Code Playgroud)
同
string json = "{\"Bar\":\"something\"}";
Run Code Online (Sandbox Code Playgroud)
不改变程序的行为.
因此,要获得不同的值,您应该更改JsonConvert的工作方式,但JsonConvert符合JSON标准,因此忘记它!
如果你实际上并没有序列化ExpandoObject(也没有任何其他密封类在你的控件之外),你可以使用你在json中序列化的类型的DebuggerDisplayAttribute来定义在调试期间如何显示对象(在你的代码中,foo实例).
但字符串是一个字符串,VisualStudio是正确的:双引号必须转义.
| 归档时间: |
|
| 查看次数: |
46853 次 |
| 最近记录: |