如何将C#List 转换为Javascript数组?

我有一个数据表,我正在转换为List,序列化它并使用viewmodel将其传递给我的视图。

我的viewmodel看起来像这样:

public class AddressModel { public string Addresses { get; set; } } 

我的控制器操作如下所示:

 AddressModel lAddressGeocodeModel = new AddressGeocodeModel(); List lAddresses = new List(); string lSQL = " select Address1, CityName, StateCode, ZipCode " + " from AddressTable "; // Convert the data to a List to be serialized into a Javascript array. //{ ...data retrieval code goes here... //} foreach (DataRow row in AddressTable.Rows) { string[] lAddress = new string[5]; lAddress[1] = row["Address1"].ToString(); lAddress[2] = row["CityName"].ToString(); lAddress[3] = row["StateCode"].ToString(); lAddress[4] = row["ZipCode"].ToString(); lAddresses.Add(lAddress); } lAddressGeocodeModel.UnitCount = lAddresses.Count().ToString(); // Here I'm using the Newtonsoft JSON library to serialize my List lAddressGeocodeModel.Addresses = JsonConvert.SerializeObject(lAddresses); return View(lAddressModel); 

然后在我看来,我得到以下地址字符串:

 [["123 Street St.","City","CA","12345"],["456 Street St.","City","UT","12345"],["789 Street St.","City","OR","12345"]] 

我怎么能把这个序列化的字符串驻留在一个剃刀模型中的javascript数组?

您可以直接将值注入JavaScript:

 //View.cshtml  

请参阅JSON.parseHtml.Raw

或者,您可以通过Ajax获取值:

 public ActionResult GetValues() { // logic // Edit you don't need to serialize it just return the object return Json(new { Addresses: lAddressGeocodeModel }); }  

请参阅jQuery.ajax

很多方式Json Parse但我找到了最有效的方法

  @model List  

其中许多答案都有效,但我发现迄今为止最简单的方法是通过ViewData或ViewBag发送数据并让JSON.Net对其进行序列化。

在页面加载之前需要Javascript生成或需要避免AJAX开销时,我使用此技术:

在控制器中:

 public ActionResult MyController() { var addresses = myAddressesGetter(); ViewData["addresses"] = addresses ; return View(); } 

在视图中:

 @section scripts {  } 

您可以始终依赖JSON.NET,而某些浏览器的JSON反序列化支持较差。 相对于某些方法的另一个好处是,您可以使用浏览器的View --> Source Javascript,因为它只是服务器端生成的文本。

请注意,在大多数情况下,Web API是一种更优雅的方式来获取JSON到客户端。

我想说这是你对数据建模方式的一个问题。 不使用字符串数组作为地址,而是更简洁,更容易做到这样的事情:

创建一个表示地址的类,如下所示:

 public class Address { public string Address1 { get; set; } public string CityName { get; set; } public string StateCode { get; set; } public string ZipCode { get; set; } } 

然后在您的视图模型中,您可以填充这些地址:

 public class ViewModel { public IList
Addresses = new List
(); public void PopulateAddresses() { foreach(DataRow row in AddressTable.Rows) { Address address = new Address { Address1 = row["Address1"].ToString(), CityName = row["CityName"].ToString(), StateCode = row["StateCode"].ToString(), ZipCode = row["ZipCode"].ToString() }; Addresses.Add(address); } lAddressGeocodeModel.Addresses = JsonConvert.SerializeObject(Addresses); } }

这将为您提供如下所示的JSON:

 [{"Address1" : "123 Easy Street", "CityName": "New York", "StateCode": "NY", "ZipCode": "12345"}] 

对于那些试图不使用JSON的人,以下是我的方法:

  

这在ASP.NET Core MVC中对我有用。

  

无论如何,JSON都是有效的JavaScript对象,当您自己打印JavaScript时,一旦转换为JSON,您就不需要对JSON进行进一步编码/解码。

  

将打印以下内容,它是有效的JavaScript表达式。

  

以下是您如何实现这一目标:

 //View.cshtml