繁体   English   中英

如何从C#将多维数组传递给JavaScript?

[英]How to pass a multidimension array to javascript from c#?

我正在使用一个JQuery图表插件,该插件使用多维数组获取数据点

    var line1 = [['23-May-2008', 1578.55], ['20-Jun-2008', 566.5], 
['25-Jul-2008', 480.88], ['22-Aug-2008', 509.84]];

如何从c#返回如上所述格式的数据? 我尝试生成与输出匹配的字符串,但是它不起作用...

StringBuilder sb = new StringBuilder();

        foreach (Stats s in perfData)
        {          
            sb.Append("['" + String.Format("{0:MM-dd-yyyy}", p.Date) + "'], " + "[" + p.Value +"],");
        }

        string data = sb.ToString();
        data += data.TrimEnd(new[] { ',' });
        data = "[" + data + "]";

您可以使用任何JSON序列化器( DataContractJsonSerializerJavaScriptSerializer )将对象转换为javascript格式。 但是我个人更喜欢Json.Net

List<object[]> array2D = new List<object[]>() { 
    new object[] { DateTime.Now.AddDays(-1000), 1578.55 }, 
    new object[] { DateTime.Now.AddDays(-2000), 566.5 },
    new object[] { DateTime.Now.AddDays(-3000), 480.88 },
    new object[] { DateTime.Now.AddDays(-4000), 509.84 } 
};

string jsonstr =  JsonConvert.SerializeObject(array2D,new MyDateTimeConvertor());


public class MyDateTimeConvertor : Newtonsoft.Json.Converters.DateTimeConverterBase
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new Exception("Not implemented yet");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime)value).ToString(@"dd-MMM-yyy"));
    }
}

并且输出是有效的javascript对象

[["04-May-2009",1578.55],["08-Aug-2006",566.5],["12-Nov-2003",480.88],["15-Feb-2001",509.84]]

使用System.Web.Extensions程序System.Web.ExtensionsJavaScriptSerializer

        var data = perfData.Select(p => 
            new object[] { String.Format("{0:MM-dd-yyyy}", p.Date), p.Value });

        var serializer = new JavaScriptSerializer();
        var json = serializer.Serialize(data);

我认为您应该尝试使用JSON帮助程序(JavaScript对象表示法)进行这种操作。 我找到了该链接,希望对您有所帮助http://weblogs.asp.net/hajan/archive/2010/07/23/javascriptserializer-dictionary-to-json-serialization-and-deserialization.aspx

  1. 不应该像下面这样生成您所需要的吗?
  2. 这不是有效的JSON,因此请检查您的插件是否采用JSON,如果是,则在C#中使用JSONserializer。

     foreach (Stats s in perfData) { sb.Append("['" + String.Format("{0:MM-dd-yyyy}", p.Date) +","+ p.Value +"],"); } string data = sb.ToString(); data += data.TrimEnd(new[] { ',' }); data = "[" + data + "]"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM