c# - c#: string(json) 到 object(generic) 的转换添加了额外的大括号
问题描述
我有一个 json 作为字符串。我想把它转换成一个对象。但是在转换过程中,一切都很好,除了我在对象之外得到了一个额外的大括号。这不是一个有效的 json。
string st = "{\"Category\":\"test\"}";
var someType = JsonConvert.DeserializeObject(st);
//output of someType is {{"Category": "test"}}
//expected output {"Category": "test"}
我也试过“JObject.Parse()”。但结果是一样的。它为对象添加了额外的大括号。我希望将输出强制作为对象。
有什么我做错了吗?我错过了什么吗?
解决方案
在你所要求的范围内,JsonConver.DeserializeObject(st)
正在做你要求它做的事情。您要求它将“对象”的字符串表示形式转换为{"Category": "test"}
json 对象。您的方法的问题在于,编译器不知道如何将该字符串解释为对象以外的任何内容,因此它将其包装在 JSON 对象中。
要获得您正在寻找的结果,而不声明 POCO(即反序列化匿名类型),您需要做这样的事情
var definition = new { Category = "" };
var data = @"{'Category':'Test'}";
var me = JsonConvert.DeserializeAnonymousType(data, definition);
Console.WriteLine(me);
鉴于评论中的要求,添加另一个解决方案。
dynamic deserialized = JObject.Parse("{\"Category\":\"test\"}");
推荐阅读
- .net-core - 如何为 .net 核心控制台应用程序设置 nssm 环境变量?
- r - 并行分析适用于 psych:fa.parallel 但使用 paran 包给出错误消息
- java - 如何实现亚马逊应用内购买 API?
- python - 你能把闪光灯翻译成摩尔斯电码吗?
- c++ - 如何在 C++ 中的类主体之外定义一个专门的类方法?
- node.js - 为什么我来自 Node/Express 的 POST 和 PUT 请求在 React/Redux 中不起作用?我的 GET 和 DELETE 请求都可以正常工作。所有请求都在 Postman 中工作
- unity3d - 如何将纹理均匀地应用于网格(UV)?
- python - 如何在python中将本地时间转换为UTC时间
- ios - 当点击区域落在按钮上时,为什么不执行 UIGestureRecognizerDelegate 的 shouldRecognizeSimultaneouslyWith ?
- java - android 回调函数 onSizeChanged() 的替代方案