C# 如何从C为Google图表格式化JSON#
我正在尝试从c#输出JSON以用于谷歌图表 目前,我使用JSON.Net构建它:C# 如何从C为Google图表格式化JSON#,c#,json,C#,Json,我正在尝试从c#输出JSON以用于谷歌图表 目前,我使用JSON.Net构建它: JArray arrB = new JArray( from c in cards where c.complete group c by new { date = Convert.ToDateTime(c.completed).Date } in
JArray arrB = new JArray(
from c in cards
where c.complete
group c by new { date = Convert.ToDateTime(c.completed).Date } into g
select new JObject(
new JProperty("date", g.Key.date),
new JProperty("completedHours", g.Sum(x => x.estHours))
)
);
其输出如下:
{ "burndown" : [ { "completedHours" : 30.0,
[ { "completedHours" : 30.0,
"date" : "2014-03-26T00:00:00+00:00"
},
{ "completedHours" : 3.0,
"date" : "2014-04-03T00:00:00+01:00"
},
{ "completedHours" : 3.0,
"date" : "2014-03-28T00:00:00+00:00"
},
{ "completedHours" : 1.0,
"date" : "2014-03-27T00:00:00+00:00"
}
]
然而,谷歌图表不喜欢这样。据我所知,我需要对它进行格式化,使它在第一个数据块中有列标题,然后在第二个数据块中有内容。我是JSON新手,所以不知道该怎么做
编辑:添加“正确”结构
从Google Charts文档中可以看出,正确的格式如下:
{"cols":[{"id":"Col1","label":"","type":"date"}],
"rows":[
{"c":[{"v":"a"},{"v":"Date(2010,10,6)"}]},
{"c":[{"v":"b"},{"v":"Date(2010,10,7)"}]}
]
}
public class Col
{
public string id { get; set; }
public string label { get; set; }
public string type { get; set; }
}
public class C
{
public string v { get; set; }
}
public class Row
{
public List<C> c { get; set; }
}
public class RootObject
{
public List<Col> cols { get; set; }
public List<Row> rows { get; set; }
}
var rootObject = new RootObject()
{
cols = new List<Col>
{
new Col {id = "1", label = "2", type = "string"}
},
rows = new List<Row>()
{
new Row
{
c = new List<C> {
new C { v = "a" },
new C { v = "b"}
}
}
}
};
请参阅:根据JSON模式,对象层次结构需要如下所示:
{"cols":[{"id":"Col1","label":"","type":"date"}],
"rows":[
{"c":[{"v":"a"},{"v":"Date(2010,10,6)"}]},
{"c":[{"v":"b"},{"v":"Date(2010,10,7)"}]}
]
}
public class Col
{
public string id { get; set; }
public string label { get; set; }
public string type { get; set; }
}
public class C
{
public string v { get; set; }
}
public class Row
{
public List<C> c { get; set; }
}
public class RootObject
{
public List<Col> cols { get; set; }
public List<Row> rows { get; set; }
}
var rootObject = new RootObject()
{
cols = new List<Col>
{
new Col {id = "1", label = "2", type = "string"}
},
rows = new List<Row>()
{
new Row
{
c = new List<C> {
new C { v = "a" },
new C { v = "b"}
}
}
}
};
公共类Col
{
公共字符串id{get;set;}
公共字符串标签{get;set;}
公共字符串类型{get;set;}
}
公共C类
{
公共字符串v{get;set;}
}
公共类行
{
公共列表c{get;set;}
}
公共类根对象
{
公共列表列{get;set;}
公共列表行{get;set;}
}
因此,要构建json,您需要执行以下操作:
{"cols":[{"id":"Col1","label":"","type":"date"}],
"rows":[
{"c":[{"v":"a"},{"v":"Date(2010,10,6)"}]},
{"c":[{"v":"b"},{"v":"Date(2010,10,7)"}]}
]
}
public class Col
{
public string id { get; set; }
public string label { get; set; }
public string type { get; set; }
}
public class C
{
public string v { get; set; }
}
public class Row
{
public List<C> c { get; set; }
}
public class RootObject
{
public List<Col> cols { get; set; }
public List<Row> rows { get; set; }
}
var rootObject = new RootObject()
{
cols = new List<Col>
{
new Col {id = "1", label = "2", type = "string"}
},
rows = new List<Row>()
{
new Row
{
c = new List<C> {
new C { v = "a" },
new C { v = "b"}
}
}
}
};
var rootObject=new rootObject()
{
cols=新列表
{
新列{id=“1”,label=“2”,type=“string”}
},
行=新列表()
{
新行
{
c=新列表{
新的C{v=“a”},
新的C{v=“b”}
}
}
}
};
如果您从nuGet获得Newtonsoft JSON包,您只需创建所需的任何对象结构,然后使用该库将其编码为JSON字符串。这应该可以让你摆脱所有的猜测和“我对JSON不熟悉”的困扰。你能用输出所需的JSON结构更新你的问题吗?谢谢。这就是我正在使用的-不确定我如何更改字符串的格式,因为默认情况下,它会如上所述对其进行编码。你能给我指出正确的方向吗?正如@YuvalItzchakov所说的,如果你有一个它期望的JSON样本,它会更容易帮助你。