[英]Convert JSON String to JSON Object c#
我有这个字符串存储在我的数据库中:
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);
或尝试键入对象尝试:
Foo json = JsonConvert.DeserializeObject<Foo>(str)
这有效
string str = "{ 'context_name': { 'lower_bound': 'value', 'pper_bound': 'value', 'values': [ 'value1', 'valueN' ] } }";
JavaScriptSerializer j = new JavaScriptSerializer();
object a = j.Deserialize(str, typeof(object));
有一种有趣的方法可以实现另一个目标,即使用非常强大的工具建立基于 json 的强类型类,我几天前第一次使用该工具将 tradedoubler json 结果转换为类
是一个简单的工具:复制您的 json 源代码粘贴,几秒钟后您将拥有一个面向 json 的强类型类。 通过这种方式,您将使用这些更强大且易于使用的类。
您可以尝试如下:
string output = JsonConvert.SerializeObject(jsonStr);
这适用于我使用JsonConvert
var result = JsonConvert.DeserializeObject<Class>(responseString);
如果您的 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);
这在 JObject 的情况下不起作用,这适用于简单的 json 格式数据。 我已尝试将以下 json 格式数据的数据反序列化为类型,但没有得到响应。
对于这个 Json
{
"Customer": {
"id": "Shell",
"Installations": [
{
"id": "Shell.Bangalore",
"Stations": [
{
"id": "Shell.Bangalore.BTM",
"Pumps": [
{
"id": "Shell.Bangalore.BTM.pump1"
},
{
"id": "Shell.Bangalore.BTM.pump2"
},
{
"id": "Shell.Bangalore.BTM.pump3"
}
]
},
{
"id": "Shell.Bangalore.Madiwala",
"Pumps": [
{
"id": "Shell.Bangalore.Madiwala.pump4"
},
{
"id": "Shell.Bangalore.Madiwala.pump5"
}
]
}
]
}
]
}
}
字符串结果 = await resp.Content.ReadAsStringAsync(); List _Resp = JsonConvert.DeserializeObject<List>(result); //List _objList = new List((IEnumerable)_Resp);
IList usll = _Resp.Select(a => a.lttsdata).ToList();
// List<ListViewClass> _objList = new List<ListViewClass>((IEnumerable<ListViewClass>)_Resp);
//IList usll = _objList.OrderBy(a=> a.ReqID).ToList();
Lv.ItemsSource = usll;
在您从 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 的回答实现了这个解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.