这可能不是最好的方法,但它是我知道如何处理c#的最佳方式。我试图创建一个字典,然后将其转换为json。现在我只是试着让字典与我以后想要的json格式相匹配。以下是我到目前为止的情况:
`Dictionary<Dictionary<string, string>, Dictionary<string, List<List<Decimal>>>> testDict = new Dictionary<Dictionary<string, string>, Dictionary<string, List<List<Decimal>>>>() {
new Dictionary<string, string>() {
{ "test", "test" }
}
};`
这给了我以下错误:
没有与所需形式参数对应的参数
我不知道是什么导致这种情况,任何帮助都会很棒,谢谢!
这是我尝试复制的json结构:
[
{
"target": "1",
"datapoints": [
[
67.0,
1491609600.0
]
]
},
{
"target": "2",
"datapoints": [
[
54.0,
1491091200.0
],
[
65.0,
1491177600.0
],
[
69.0,
1491609600.0
],
[
65.0,
1491696000.0
],
[
54.0,
1491868800.0
],
[
63.0,
1491955200.0
],
[
64.0,
1492214400.0
],
[
57.0,
1492732800.0
],
[
72.0,
1492819200.0
],
[
50.0,
1493337600.0
],
[
63.0,
1493424000.0
]
]
},
]
答案 0 :(得分:1)
好的,不是你的问题的答案,但它会有所帮助,是你的JSON的正确结构:
public class TargetClass
{
public string target{ get; set; }
public List<double[]> datapoints{ get; set; }
}
那是基类。如果你想反序列化你在JSON中的内容,你会做这样的事情(假设你使用的是Newtonsoft Json,否则就改用你使用的库):
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<TargetClass[]>(theString);
要序列化,你会创建这样的东西:
var items = new List<TargetClass>();
var target = new TargetClass{ target = "1", datapoints = new List<double[]>{ new double[]{ 67.0, 1491609600.0 } };
items.Add(target);
var ser = Newtonsoft.Json.JsonConvert.SerializeObject(items);
答案 1 :(得分:0)
使用匿名类型,您可以创建复杂的对象层次结构,就像编写普通的JSON一样简单:
var obj = new[] {
new {
target = "1",
datapoints = new [] {
new [] {
67.0,
1491609600.0
}
}
},
new {
target = "2",
datapoints = new [] {
new [] {
54.0,
1491091200.0
},
new [] {
65.0,
1491177600.0
},
}
}
};
var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
演示:https://dotnetfiddle.net/jk8gho
如果此对象中的子集合是扩展的主题,则最好将这些集合明确定义为List<dynamic>
。严格来说,dynamic
不是必需的,可以使用显式类型,但使用dynamic
可以简化定义。
var obj = new List<dynamic> {
new {
target = "1",
datapoints = new List<dynamic> {
new [] {
67.0,
1491609600.0
}
}
},
new {
target = "2",
datapoints = new List<dynamic> {
new [] {
54.0,
1491091200.0
},
new [] {
65.0,
1491177600.0
},
}
}
};
var target2 = obj.Where(t => t.target == "2").Single();
target2.datapoints.Add(new [] {
64.0,
1492214400.0
});
target2.datapoints.Add(new[] {
57.0,
1492732800.0
});
var target3 = new {
target = "3",
datapoints = new List<dynamic> { }
};
target3.datapoints.Add(new[] {
72.0,
1492819200.0
});
obj.Add(target3);
var json = JsonConvert.SerializeObject(obj, Formatting.Indented);