【问题标题】:System.Collections.Generic.List`1[System.String]" JSON errorSystem.Collections.Generic.List`1[System.String]" JSON 错误
【发布时间】:2019-04-05 12:06:23
【问题描述】:

我正在尝试使用 JSON,并且我正在使用 PostMan 返回响应 这个错误发生 System.Collections.Generic.List`1[System.String]"}

    public ActionResult SendVFCode(string Phone_Number)
    {
        var jsonSerialiser = new JavaScriptSerializer();
        string error = "";
        var SearchData ="";

        if (Phone_Number == null)
        {
            error = "Must enter your phone number";
        }
        else if ( (db.PhoneNumbers.Select(x =>x.Id).Count() < 0)
              &&  (db.Assistant.Select(x =>x.Id).Count()) < 0)
        {
            error = "There are no data or your account is not activated";
        }
        else
        {                
            SearchData = db.PhoneNumbers.Include(x => x.Assistant)
            .Where(x => x.PhoneNumber == Phone_Number 
            && x.Assistant.IsActive == true).Select(xx =>xx.PhoneNumber).ToList().ToString();
        }

        json = new
        {
            err = error,
            ResultSearchData = SearchData
        };

        return Content(jsonSerialiser.Serialize(json));
    }

【问题讨论】:

  • 从您的查询中删除 .ToString()
  • 但如果我输入 var SearchData =""; 则需要初始化 var SearchData mut add .Tostring()
  • 它已初始化 - 它是 List&lt;string&gt;,但随后您将其转换为 string。再次删除.ToString()
  • 当我更改为 List SearchData; ResultSearchData 发生错误 = SearchData 编译器说在 SearchData 中使用了 unassigend 局部变量
  • 它的 var SearchData = new List&lt;string&gt;(); - 但你甚至不需要它 - 只需删除它并使用 var SearchData = db.PhoneNumbers.Include(......

标签: json entity-framework linq asp.net-mvc-5 json.net


【解决方案1】:

SearchData 不是字符串。不要将其声明为字符串,也不要尝试将字符串塞入其中。它是一个列表(可能是 List&lt;string&gt; 类型或您的电话号码类型)。

var SearchData =""

应该是:

List<string> SearchData;

你的数据库调用应该以.ToList()结束,而不是.ToList().ToString()

【讨论】:

  • 当我更改为 List SearchData; ResultSearchData 发生错误 = SearchData 编译器说在 SearchData 中使用了 unassigend 局部变量
【解决方案2】:

请注意,ToList() 后跟 ToString() 返回列表的完全限定名称而不是列表内容,因此您应该使用 List&lt;string&gt; 来保存结果字符串(而且列表必须先实例化才能在 @ 中使用987654324@-块)。正确的设置应该是这样的:

public ActionResult SendVFCode(string Phone_Number)
{
    var jsonSerialiser = new JavaScriptSerializer();
    string error = "";
    var SearchData = new List<string>(); // instantiate list of strings

    var phoneCount = db.PhoneNumbers.Select(x => x.Id).Count();
    var assistantCount = db.Assistant.Select(x => x.Id).Count();

    if (Phone_Number == null)
    {
        error = "Must enter your phone number";
    }
    else if (phoneCount < 0 && assistantCount < 0)
    {
        error = "There are no data or your account is not activated";
    }
    else
    {                
        // assign list from query results
        SearchData = db.PhoneNumbers.Include(x => x.Assistant)
        .Where(x => x.PhoneNumber == Phone_Number && x.Assistant.IsActive == true)
        .Select(xx => xx.PhoneNumber).ToList();
    }

    var json = new
    {
        err = error,
        ResultSearchData = SearchData
    };

    return Content(jsonSerialiser.Serialize(json));
}

【讨论】:

  • 很好,但在查询之后没有返回类似 {"err":"","ResultSearchData":[]} 虽然我确信代码是正确的并且表中的数据满足这个条件是我的 sql 代码 select userid,PhoneNumber from PhoneNumbers p join Assistants a on a.Id =p.UserId where a.IsActive = 'true' and p.PhoneNumber='0945983485'
  • 而我正在写 sql 查询,比如 linq 查询返回数据
  • ResultSearchData(和SearchData)在序列化之前真的有结果吗?还要检查PhoneNumber 是否包含一些字符串,而不是空白。
  • SearchData 没有返回数据查询返回 "" 结果并且我检查了 PhoneNumber 没有空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 2019-05-13
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多