我編輯問題之下的解決方案!從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)在
相關問題