首页 > 解决方案 > 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()”。但结果是一样的。它为对象添加了额外的大括号。我希望将输出强制作为对象。

有什么我做错了吗?我错过了什么吗?

标签: c#json

解决方案


在你所要求的范围内,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\"}");

推荐阅读