我编辑问题之下的解决方案!从JSON序列化中移除c#class属性(删除引号)
我已阅读喜欢上了这30件类似物品,但没有相当过瘾。
我的方案:为了用ASP.NET中的数据提供图表库(highcharts/highstock),我手动为这样的图创建了基本类。这是因为所有包装项目都适用于高层建筑,但不适合高层建筑。然而,highstock需要一个HTML脚本块这样的(工作):
<script>
$('#container2').highcharts('StockChart',
{
"title": {
"text": "Graph_Title_string"
},
"yAxis": {
"title": {
"text": "YAxis_Title_string"
},
"height": 200,
"lineWidth": 2,
"top": 80
},
"series": [
{
"type": "line",
"name": "Testdata",
"data": [[Date.UTC(2014, 3, 8, 0, 0), 3], [Date.UTC(2014, 3, 9, 0, 0), 2], [Date.UTC(2014, 3, 10, 0, 0), 4], [Date.UTC(2014, 3, 11, 0, 0), 4], [Date.UTC(2014, 3, 12, 0, 0), 3], [Date.UTC(2014, 3, 13, 0, 0), 4], [Date.UTC(2014, 3, 14, 0, 0), 2], [Date.UTC(2014, 3, 15, 0, 0), 1], [Date.UTC(2014, 3, 16, 0, 0), 4], [Date.UTC(2014, 3, 17, 0, 0), 0]]
}]
});
我创建了C#类和它们的属性,例如:
public class Series
{
public string type { get; set; }
public string name { get; set; }
public object data { get; set; }
}
后来我用JsonConvert .SerializeObject将我的图表对象(实例类标题,yAxis,系列等等)序列化,这会导致以下输出:
{
"title": {
"text": "Graph_Title_string"
},
"yAxis": {
"title": {
"text": "YAxis_Title_string"
},
"height": 200,
"lineWidth": 2,
"top": 0
},
"series": [
{
"type": "line",
"name": "Testdata",
"data": "[[Date.UTC(2014, 3, 8, 0, 0), 3],[Date.UTC(2014, 3, 9, 0, 0), 2],[Date.UTC(2014, 3, 10, 0, 0), 0],[Date.UTC(2014, 3, 11, 0, 0), 4],[Date.UTC(2014, 3, 12, 0, 0), 4],[Date.UTC(2014, 3, 13, 0, 0), 2],[Date.UTC(2014, 3, 14, 0, 0), 1],[Date.UTC(2014, 3, 15, 0, 0), 1],[Date.UTC(2014, 3, 16, 0, 0), 0],[Date.UTC(2014, 3, 17, 0, 0), 3]]"
}
]
}
所以问题是:series-> data的值用引号引起来。由于highstock显然需要一个对象数组作为数据([[DateTime,value],[DateTime,value],... etc]),除非我删除数组中的这些引号,否则不会呈现图表。
当数组是“纯”整数将不会有引号(我猜),但因为我的点需要是DateTime /值我需要一个对象数组。
因此,问题:我该如何强制我的JSON序列化程序不把我的对象数组的值放在引号中?
也许这是微不足道的和简单的,我期待远。如上所述,我已阅读了许多关于类似问题的文章,但没有为我工作。任何帮助高度赞赏!
SOLUTION:
该数据阵列中的我的串联节点为int /双 - DATE.UTC(2014,3,8,0,0)不返回一个DateTime但一个NUMBER(参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC)
因此,在我的后面的类中定义一个双数组将导致所需的输出格式(如craig下面的伟大建议以及标记的答案中所见),而不带引号。
代码(参考:http://forums.asp.net/post/1463013.aspx ...然而,稍微修改)为C#日期时间转换成所需的毫秒时间戳:
public double MilliTimeStamp(DateTime d2)
{
DateTime d1 = new DateTime(1970, 1, 1);
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return ts.TotalMilliseconds;
}
'data'属性引用的对象的实际类型是什么? – har07
这有点麻烦:它是一个字符串。 对此的解释:某种程度上,HIGHSTOCK API只能从
创建定义的类,如下所示:
然后使用下面的代码来填充它并将其转换为JSON。
所得JSON是:
PS声明
data
为object[]
也生成了上面的JSON。来源
2014-04-17 12:58:31
可能他们会,但我的数据数组/列表不能是DateTime类型,因为我需要输入两种类型作为数据点(DateTime,int/double)。所以它必须是公共对象数据(或公共对象[]数据,这没有什么区别) –
好吧,我在原始问题中没有看到这一点。我用一些代码更新了答案,并且自己尝试了这些结果。 –
也许比我的初始问题更清楚,因为这么直截了当。您可以看到有什么困扰我:在DateTime周围引号引起JSON输出的部分导致HIGHSTOCK库失败。 我进一步尝试:Date.parse(“2014-04-17T07:47:16.3620755-07:00”)代替Date.UTC(2014,3,8,0,0)在
相关问题