从http服务器收到的Json数据如下:
[
{
"token":"NlhYnzF0xqG"
},
[
{
"ts":"2019-03-21 14:06:22.123",
"id":"CC_RTC_Second",
"val":"22"
},
{
"ts":"2019-03-21 14:06:00.096",
"id":"CC_RTC_Minute",
"val":"6"
},
{
"ts":"2019-03-21 14:00:00.276",
"id":"CC_RTC_Hour",
"val":"14"
}
]
]
我尝试了Newtonsoft.Json文档中介绍的一些技术,但是找不到正确的方法。我花了两天时间测试来自StackOverflow答案的解决方案,但没有成功。
在这种特殊情况下,我应该使用哪些C#类型和技术?
数据结构可能会有所不同:
属性的完整列表是:td,id,val,标志,类型,uts,nr。
它们都是字符串。
如果attrs不存在,服务器可以省略它,因此例如我只能获得ts + id。
有什么方法可以处理这样的数据吗?
答案 0 :(得分:1)
First of all your json is quite complicated and its tedious job to create a class hierarchy for your json,
But one simple approach is that if you parse your JSON to JArray
and then takes
Then might be you can retrieve all your json data
string json = File.ReadAllText(@"Path to your json");
JArray jArray = JArray.Parse(json);
Token token = jArray[0].ToObject<Token>();
jArray.RemoveAt(0);
RandomData[] tokenData = jArray.First.ToObject<RandomData[]>();
//--------------------Print Data to Console-------------------
Console.WriteLine(token.token + "\n");
foreach (var item in tokenData)
{
Console.WriteLine("ts: " + item.ts);
Console.WriteLine("id: " + item.id);
Console.WriteLine("val: " + item.val + "\n");
}
Console.ReadLine();
And classes are,
class Token
{
public string token { get; set; }
}
class RandomData
{
public string ts { get; set; }
public string td { get; set; }
public string id { get; set; }
public string val { get; set; }
public string flags { get; set; }
public string type { get; set; }
public string uts { get; set; }
public string nr { get; set; }
}
Output:
上禁用Javascript操作 注意:您需要安装NewtonSoft NuGet软件包并将using Newtonsoft.Json.Linq;
命名空间导入程序。
答案 1 :(得分:0)
有我的答案版本:
var strData = @"[{
'token': 'NlhYnzF0xqG'
},
[{
'ts': '2019-03-21 14:06:22.123',
'id': 'CC_RTC_Second',
'val': '22'
}, {
'ts': '2019-03-21 14:06:00.096',
'id': 'CC_RTC_Minute',
}, {
'id': 'CC_RTC_Hour',
'val': '14'
}]
]";
var result = JsonConvert.DeserializeObject<List<JToken>>(strData);
var tokens = result.Where( x=> x.Type == JTokenType.Object).Select(x=> x.ToObject<Token>());
var innerData = result.Where(x => x.Type == JTokenType.Array).Select(x => x.ToObject<List<InnerData>>());
有课程:
public class Token
{
public string token { set; get; }
}
public class InnerData
{
public string ts { set; get; }
public string id { set; get; }
public string val { set; get; }
}
您可以如前所述打印结果:
foreach (var token in tokens)
{
Console.WriteLine("ts: " + token.token);
}