2014-04-17 79 views
0

我编辑问题之下的解决方案!从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; 
     } 
+0

'data'属性引用的对象的实际类型是什么? – har07

+0

这有点麻烦:它是一个字符串。 对此的解释:某种程度上,HIGHSTOCK API只能从

2

创建定义的类,如下所示:

public class Series 
{ 
    public string type { get; set; } 
    public string name { get; set; } 
    public List<object> data { get; set; }  
} 

然后使用下面的代码来填充它并将其转换为JSON。

Series series = new Series(); 
series.type = "foo"; 
series.name = "bar"; 

series.data = new List<object>(); 

for(int i = 0; i < 5; i++) 
{ 
    series.data.Add(DateTime.Now); 
    series.data.Add(i); 
} 

var json = JsonConvert.SerializeObject(series); 

所得JSON是:

{ “类型”: “foo” 的, “姓名”: “棒”, “数据”:[“2014-04-17T07:47:16.3620755 -07:00“,0,”2014-0 4-17T07:47:16.3620755-07:00“,1,”2014-04-17T07:47:16.3620755-07:00“,2,”2014-04 -17 T07:47:16.3620755-07:00" ,3 “2014-04-17T07:47:16.3620755-07:00”,4]}

PS声明dataobject[]也生成了上面的JSON。

+0

可能他们会,但我的数据数组/列表不能是DateTime类型,因为我需要输入两种类型作为数据点(DateTime,int/double)。所以它必须是公共对象数据(或公共对象[]数据,这没有什么区别) –

+0

好吧,我在原始问题中没有看到这一点。我用一些代码更新了答案,并且自己尝试了这些结果。 –

+0

也许比我的初始问题更清楚,因为这么直截了当。您可以看到有什么困扰我:在DateTime周围引号引起JSON输出的部分导致HIGHSTOCK库失败。 我进一步尝试:Date.parse(“2014-04-17T07:47:16.3620755-07:00”)代替Date.UTC(2014,3,8,0,0)在

  • 11. 从Json输出中删除引号
  • 12. 从Jobject删除属性c#
  • 13. C#序列化删除子类中的属性?
  • 14. 从simpledb删除属性/列
  • 15. 从C#中的类中移除属性
  • 16. 在反序列化之前从JSON字符串中删除属性
  • 17. 从ID列表中删除单引号
  • 18. 删除双引号从Json的接收数据表中的C#
  • 19. 如何在C#中从Json中删除属性容器?
  • 20. 从XMLBean中删除属性
  • 21. 删除JSON结果中的双引号?
  • 22. 从列中删除逗号
  • 23. JSON序列化 - 删除空密钥
  • 24. 删除引号
  • 25. 删除引号
  • 26. C#从根节点删除属性
  • 27. 从JSON序列化的对象中移除子项
  • 28. .NET MVC,从Json序列化的对象中移除信息()
  • 29. 在php中删除json属性
  • 30. 动态删除属性的C#属性