当前位置: 首页 > 知识库问答 >
问题:

用组合框替换文本框时遇到JSON错误

卢才艺
2023-03-14

我对Visual Studio很陌生。我正在编写一个程序,当输入员工姓名并单击“Get User”按钮时,该程序将从API中检索其签名(例如,如果输入员工姓名Jane Doe,则将从API字符串中检索签名“JNDO”)。

当使用文本框输入名称时,将成功读取所需信息。但是,当我将文本框替换为组合框以在用户键入时建议名称时,我会收到以下错误:

jsonReaderException:“解析值时遇到意外字符:<.路径'',行0,位置0.'此异常最初是在以下调用堆栈引发的:Webapi.cs Timesheets_Try_11.Controllers.Webapi.GetSignature(string)中的[External Code]Timesheets_Try_11.Form1.Button1_Click(object,System.EventArgs)中的Form1.cs[External Code]Timesheets_Try_11.Program.Main()中的Program.cs

通过使用断点来理解值,它声明

字符串不是JSON格式;

我的JSON字符串:

[{"signature":"JNDO","firstName":"Jane","fullName":"Doe, Jane","lastName":"Doe"}]

我的windows窗体的代码:

namespace TimeSheets_Try_11

{
    public partial class Form1 : Form
    {
        WebAPI WA = new WebAPI();
      

        public Form1()
        {
            InitializeComponent();
            webBrowser1.Url = new Uri(StaticStrings.UrlIora);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {


            comboBox1.DataSource = WA.Getsignature(textBox2.Text);


        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

       
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(AutoCompleteStringCollection combData)
        {
            
            
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 p = new Form2();
            p.ShowDialog(); 
        }
    }
}

调用JSON的代码

namespace TimeSheets_Try_11.Controllers
{
    class WebAPI
    {
       

        public string Getsignature(string name)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var cookies = FullWebBrowserCookie.GetCookieInternal(new Uri(StaticStrings.UrlIora), false);
            WebClient wc = new WebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            wc.Headers.Add("Cookie:" + cookies);
            wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            wc.UseDefaultCredentials = true;
            string uri = "";

            uri = StaticStrings.UrlIora + name;

            var myJsonResponse = wc.DownloadString(uri);

            Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);

            string signame = myDeserializedClass.ToString();
            return signame;

        }
}

在JSON中定义变量的代码:

namespace TimeSheet_Try11_Models
{

    public class Employeename
        {
            public string signature { get; set; }
            public string firstName { get; set; }
            public string fullName { get; set; }
            public string lastName { get; set; }
        
        }


    public class Root
    {
        public List<Employeename> Employeename { get; set; }
    }
   
}

共有1个答案

宰父跃
2023-03-14

我不会亲自将文本框换成组合框来提供自动完成,我会将文本框的AutoCompleteMode设置为例如SuggestAppend,并将其AutoCompleteSource设置为例如CustomSource,然后将其AutoCompleteCustomSource设置为一个AutoCompleteStringCollection,该AutoCompleteCustomSource,该

var acsc = new AutoCompleteStringCollection();
acsc.Add("Jane Doe"); // value from API perhaps?
acsc.Add("John Smith"); // value from API query all

当用户让文本框帮助他们写名字时,这个名字可以提交给API来加载其余的用户信息

一个组合可能会提前工作;下载所有的数据,选择其中的一些在组合中显示,其余的保留在后面的代码中供访问。

 类似资料:
  • 注意:试图访问第18行C:\xampp\htdocs\E-LAMAX\app\libraries\Core.php中null类型值的数组偏移量 致命错误:未捕获PDOException:SQLSTATE[42S02]:找不到基表或视图:1146表“lamax.settings”在C:\xampp\htdocs\E-lamax\app\libraries\Database.php中不存在。php:6

  • 我认为问题是我创建了一个新的XWPFparage,embeddedPara,它替换了embeddedPara的单词,而不是origin段落。所以我写了一个档案之后,字还是没变。 如何阅读并替换文本框中的单词,而不创建一个新的XWPF段落?

  • 在启动时获取错误:“虚拟框无法启动虚拟设备。要找出问题的原因,请从虚拟框启动虚拟设备。有关详细信息,请查找日志文件。" 当我在VirtualBox上启动API时,得到错误消息:“虚拟机'Google Nexus 5-6.0.0-API 23-1080x1920'在启动过程中意外终止,退出代码为1(0x1)。有关详细信息,请参阅'C:\Users\Mavara\AppData\Local\Genym

  • 文本框可以让用户输入文本。它们可以是单行的,带或不带滚动条,也可以是多行的,并且带有一个图标。点击文本框后显示光标,并自动显示键盘。除了输入,文本框可以进行其他任务操作,如文本选择(剪切,复制,粘贴)以及数据的自动查找功能。详情见 模式 > 选择 文本选择的设计。 文本框可以有不同的输入类型。输入类型决定文本框内允许输入什么样的字符,有的可能会提示虚拟键盘并调整其布局来显示最常用的字符。常见的类型

  • 我有一个ComboBox,我想在视图模型中将选中的项目文本绑定到一个字符串。 现在我有了: Xaml: 视图模型: 当我运行该程序时,我收到异常: Binding表达式路径错误:在“对象”上找不到“类型”属性“观察集合'1'(HashCode=34166919)”。Binding表达式:路径=类型;数据项=“观察集合'1'(HashCode=34166919);目标元素是“组合框”(名称=");目

  • 我有两个组合框。我正在填充这样的两个组合框。组合框1和2的名称是cmbpartyName和cmbprefPT2。 在这里,我从combox1中选择一个值,在它所选的索引更改事件中,如下所示。 由于两个组合框具有相同的值,如何从第二个组合框cmbPrefPT2中删除第一个组合框的选定值?

  • 主要内容:Listbox控件,Combobox控件列表框(Listbox)和复选框(Combobox)是 Tkinter 中两个控件,由于其非常相似,本节将它们放在一起进行介绍。 Listbox控件 首先介绍一下列表框,即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中,如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。 下面对列表框控件(Listbox)的常

  • 我的用户控件上有两个组合框。我的目标是,当第一个被选中(里面有一个项目)时,第二个应该处于活动状态。以下是代码片段: 当第一个是项目选择时,如何激活第二个组合框?