我想用post方法将数据发送到KairosDB,但是Json是不正确的。Json一定是这样的:
{
"name":"Hermle_1",
"datapoints":[
[
"1530710258000",
23.0
],
[
"1530710257000",
21.0
]
],
"tags":{
"SensorName":"capteur_temperature"
}
}对于数据点,我将Dictionary<string, float>添加到对象中。我序列化它时拥有的内容:
{
"name":"Hermle_1",
"datapoints":{
"1530710258000":23.0,
"1530710257000":21.0
},
"tags":{
"SensorName":"capteur_temperature"
}
}如果我更改我的字典.ToArray(),我有以下Json:
{
"name":"Hermle_1",
"datapoints":[
{
"Key":"1530710258000",
"Value":23.0
},
{
"Key":"1530710257000",
"Value":21.0
}
],
"tags":{
"SensorName":"capteur_temperature"
}
}我不知道如何为数据点生成预期格式的json。
编辑:如何创建对象:
dynamic jsonObj = new ExpandoObject();
jsonObj.name = sd.Engine_name;
Dictionary<string, float> datapoints = new Dictionary<string, float>();
Dictionary<string, string> tags = new Dictionary<string, string>();
tags.Add("SensorName", sensor.Name);
//.........
while (reader.Read())
{
datapoints.Add(Convert.ToString(reader["time"]),
Convert.ToSingle(reader["value"]));
}
//....
jsonObj.datapoints = datapoints;
jsonObj.tags = tags;
string a = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);发布于 2018-07-05 08:50:39
正如我在上面的评论中所说的,datapoints不是一个Dictionary,而是一个List<List<object>>,它必须是object,因为您必须将string和float放在同一个列表中。
List<List<object>> datapoints = new List<List<object>>();
while (reader.Read()) {
datapoints.Add(new List<object>{
Convert.ToString(reader["time"]),
Convert.ToSingle(reader["value"])
});
}发布于 2018-07-05 09:03:00
如果您不确定如何将json字符串转换为类构造,请查看这个有用的工具。使用可以填充json数据的类结构的优点是,您不需要使用任何动态变量来序列化或反序列化json对象。
生成的C#代码如下所示:
public class Tags
{
public string SensorName { get; set; }
}
public class RootObject
{
public string Name { get; set; }
public List<List<object>> Datapoints { get; set; }
public Tags Tags { get; set; }
}在查看了生成的代码之后,您可以看到哪里出错了。数据点的json使用的是列表的List(),而不是Dictionary<string, float>。
现在使用它来生成json数据非常简单:
var root = new RootObject();
root.Name = sd.Engine_name;
root.Tags = new List
{
new Tags {SensorName = sensor.Name}
};
var datapoints = new List<List<object>>();
while (reader.Read())
{
datapoints.Add(new List<object>{
Convert.ToString(reader["time"]),
Convert.ToSingle(reader["value"])
});
}
root.Datapoints = datapoints;
var json = JsonConvert.SerializeObject(root, Formatting.Indented);https://stackoverflow.com/questions/51186717
复制相似问题