我有这个字符串存储在我的数据库:

str = "{ "context_name": { "lower_bound": "value", "upper_bound": "value", "values": [ "value1", "valueN" ] } }"

这个字符串已经是JSON格式,但我想把它转换成一个JObject或JSON对象。

JObject json = new JObject();

我尝试了json = (JObject)str;铸,但它没有工作,所以我怎么能做到呢?


当前回答

如果你不想要或不需要类型化对象,请尝试:

using Newtonsoft.Json;
// ...   
dynamic json  = JsonConvert.DeserializeObject(str);

对于类型化对象,可以尝试:

using Newtonsoft.Json;

// single    
Foo foo  = JsonConvert.DeserializeObject<Foo>(str);

// or as a list
List<Foo> foos = JsonConvert.DeserializeObject<List<Foo>>(str); 

其他回答

有一种有趣的方法来实现另一个目标,那就是用一个非常强大的工具来实现一个基于json的强类型类,我几天前第一次使用这个工具来将tradedoubler json结果转换为类

是一个简单的工具:复制你的json源粘贴和在几秒钟,你将有一个强类型类json面向。 通过这种方式,您将使用这些功能更强大且易于使用的类。

在这种情况下,你正在从api中检索某个实体的对象列表,你的响应字符串可能是这样的:

[{"id":1,"nome":"eeee","username":null,"email":null},{"id":2,"nome":"eeee","username":null,"email":null},{"id":3,"nome":"Ricardo","username":null,"email":null}]

在这种情况下,您可能需要一个Jason对象数组,并循环使用它们来填充c#变量。我是这样做的:

var httpResponse = await Http.GetAsync($"api/{entidadeSelecionada}");
    List<List<string[]>> Valores = new();
    if (httpResponse.IsSuccessStatusCode)
    {
        //totalPagesQuantity = int.Parse(httpResponse.Headers.GetValues("pagesQuantity").FirstOrDefault());
        //Aqui tenho que colocar um try para o caso de ser retornado um objecto vazio
        var responseString = await httpResponse.Content.ReadAsStringAsync();

        JArray array = JArray.Parse(responseString);

        foreach (JObject objx in array.Children<JObject>())
        {
            List<string[]> ls = new();
            foreach (JProperty singleProp in objx.Properties())
            {
                if (!singleProp.Name.Contains("_xyz"))
                {
                    string[] val = new string[2];
                    val[0] = singleProp.Name;
                    val[1] = singleProp.Value.ToString();
                    ls.Add(val);
                }
            }
            Valores.Add(ls);
        }
    }
    return Valores;

我通过@Andrei的回答实现了这个解决方案。

如果你的JSon字符串有“”双引号而不是单引号,并且有\n作为下一行的指示符,那么你需要删除它,因为这不是一个正确的JSon字符串,示例如下所示:

            SomeClass dna = new SomeClass ();
            string response = wc.DownloadString(url);
            string strRemSlash = response.Replace("\"", "\'");
            string strRemNline = strRemSlash.Replace("\n", " ");
            // Time to desrialize it to convert it into an object class.
            dna = JsonConvert.DeserializeObject<SomeClass>(@strRemNline);

这是

    string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
    JavaScriptSerializer j = new JavaScriptSerializer();
    object a = j.Deserialize(str, typeof(object));

你可以这样尝试:

string output = JsonConvert.SerializeObject(jsonStr);