【问题标题】:Parsing list of string to new json将字符串列表解析为新的 json
【发布时间】:2018-02-28 13:18:35
【问题描述】:

使用 .Net Nore C# MVC

我有以下代码:

我的数据:

public IEnumerable<string> GetData(string id)
{
    return  _context.TableData
            .Where(r => r.ID == id)
            .Select (r => r.Name).ToList();
}

我的 MVC 控制器:

public IActionResult GetDDL(string id)
{
    var result = _repo.GetData(id);

    //Above gives me
    //[0] = "United States"
    //[1] = "United Kingdom"

    var json = JsonConvert.SerializeObject(result);      
    //Above json convert gives me ["United States","United Kingdom"]

    return Json(json);
}

上面的代码确实返回了 Json,但我想知道如何创建新的 JSON,使其返回如下:

[{"Text":"United States","Text":"United Kingdom"}]

基本上,我想将此绑定回我的下拉列表,该下拉列表需要 JSON 数组的“文本”属性。

【问题讨论】:

  • 试试:var textResult = result.Select(x=&gt; new { Text = x});
  • 谢谢,工作正常。是否有可能以某种方式改进我的仓库中的 Linq 代码以返回上述内容而不是创建新结果。
  • 不要在Select之后添加ToList(),它会具体化IEnumerable&lt;T&gt;。此外,由于您特别希望该方法使用 IEnumerable&lt;string&gt;,因此不应将其转换为 List&lt;string&gt;
  • @kaka1234 在你需要在方法中添加这一行的情况下。
  • @EhsanSajjad 哪一行?

标签: c# json asp.net-mvc json.net


【解决方案1】:

1。在控制器中

public IActionResult GetDDL(string id)
{
    var result = _repo.GetData(id);
    var withProp = result.Select(x => new { Text = x });
    var json = JsonConvert.SerializeObject(withProp);      
    return Json(json);

    //Or shorter:
    var result = _repo.GetData(id).Select(x => new { Text = x });
    var json = JsonConvert.SerializeObject(result);      
    return Json(json); 
}

2。在存储库中

您不能返回匿名类型,因此您应该创建一个类来保存数据并使用它从存储库中返回:

public class Data
{
    public string Text { get; set; }
}

public IEnumerable<Data> GetData(string id)
{
    return  _context.TableData
                    .Where(r => r.ID == id)
                    .Select (r => new Data { Text = r.Name });
}

然后控制器中的用法保持不变:

public IActionResult GetDDL(string id)
{
    var result = _repo.GetData(id);
    var json = JsonConvert.SerializeObject(result);      
    return Json(json);
}

【讨论】:

  • 这一行是否正确:.Select (r => new Data { Text = r.Name });因为智能感知无法找到 r.Name 和错误。
  • @kaka1234 方法体错误,我已将其从IEnumerable &lt;string&gt; 更正为IEnumerable &lt;Data&gt;
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 2020-08-13
  • 1970-01-01
  • 2011-09-19
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多