2014-04-17 83 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#屬性