C # : "현재 JSON 배열을 역 직렬화 할 수 없습니다."

프로그래머 101

저는 개발자가 아니라는 말로 시작하고 싶습니다. 이것은이 복잡한 문제에 대한 코드를 처음 작성하는 것입니다 (적어도 저에게는). 모든 도움 /지도를 주시면 감사하겠습니다.

이 프로그램의 아이디어는 이름을 입력 한 후 API URL에서 직원 사용자 ID (또는 서명)를 검색하는 것입니다.

  1. API에서 검색해야하는 정보를 식별하는 클래스를 만들었습니다 (아래 코드).

     namespace TimeSheet_Try11_Models
     {
         public class Employeename
         {
             public List<string> Signature { get; set; }
             public List<string> FirstName { get; set; }
             public List<string> FullName { get; set; }
             public List<string> LastName { get; set; }
         }
    
     }
    
  2. 다음으로 API에 액세스하고 필요한 정보를 검색 할 WebAPI라는 폴더를 만들었습니다. (코드를 참조하십시오)

     namespace TimeSheets_Try_11.Controllers
     {
         class WebAPI
         {
             public string Getsignature(string name)
             {
    
    
                 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 = "";
    
                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                 uri = StaticStrings.UrlIora + name;
                 var response = wc.DownloadString(uri);
    
    
                 string json = @"[{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}]";
    
                 Employeename status = JsonConvert.DeserializeObject<Employeename>(json);
    
                 string signature = status.Signature.ToString();
                 return signature;
    
    
             }
         }
     }
    
  3. 마지막으로 다음 코드는 정보를 검색하고 표시하는 양식에 대한 내 코드입니다.

         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)
                 {
                     string strurltest = string.Format("https://iora.UniversityofHouston.com/api/dictionary/employee/" + textBox1.Text);
                     System.Net.WebRequest requestObjGet = WebRequest.Create(strurltest);
                     requestObjGet.Credentials = CredentialCache.DefaultNetworkCredentials;
                     requestObjGet.Method = "Get";
                     HttpWebResponse reponsObjGet = null;
                     reponsObjGet = (HttpWebResponse)requestObjGet.GetResponse();
    
    
    
                     string[] usernames = new string[] { "Koehne, Craig", "Bergeron, Ronald" };
                     string[] userid = new string[] { "CKOEH", "RONBE" };
    
                     for (int i = 0; i < usernames.Length; i++)
                     {
                         if (textBox1.Text.Contains(usernames[i]))
                         {
                             textBox2.Text = userid[i];
                         }
    
                     }
    
                     string sgname; string projectstring;
                     projectstring = textBox1.Text.ToString();
    
                     sgname = WA.Getsignature(projectstring);
    
                 }
    
                 private void textBox2_TextChanged(object sender, EventArgs e)
                 {
    
                     string StringConn = textBox1.Text;
    
    
                 }
    
                 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
                 {
    
                 }
             }
         }
    

문제 : 코드에 오류가없는 것 같지만 코드 디버깅을 시작하면 다음과 같은 오류가 표시됩니다.

"Newtonsoft.Json.JsonSerializationException : '현재 JSON 배열 (예 : [1,2,3])을'TimeSheet_Try11_Models.Employeename '유형으로 역 직렬화 할 수 없습니다. 유형에 JSON 개체 (예 : {"name ":"value "})가 필요하기 때문입니다. 올바르게 역 직렬화합니다. "

무례

JSON 문자열에는 하나의 객체를 포함하는 배열이 포함됩니다. 그러나 당신은 그것을 하나의 객체로 deserialize하려고합니다.

JSON 문자열을 C # 배열로 역 직렬화합니다.

string json = @"[{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}]";

Employeename[] status = JsonConvert.DeserializeObject<Employeename[]>(json);

또는 JSON 문자열을 변경하여 더 이상 배열이 아닌 객체로 만듭니다.

string json = @"{'signature':'JANDO','firstName':'Jane','fullName':'Deo, Jane','lastName':'Deo'}";

Employeename status = JsonConvert.DeserializeObject<Employeename>(json);

또한 Employeename클래스가 의미가 없으며 속성은 다음 유형이어야합니다 string.

public class Employeename
{
    public string Signature { get; set; }
    public string FirstName { get; set; }
    public string FullName { get; set; }
    public string LastName { get; set; }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

API 호출 후 현재 JSON 배열을 역 직렬화 할 수 없습니다.

분류에서Dev

현재 JSON 배열을 역 직렬화 할 수 없습니다 (예 : [1,2,3]).

분류에서Dev

현재 JSON 배열을 역 직렬화 할 수 없습니다 (예 : [1,2,3]).

분류에서Dev

현재 JSON 배열을 역 직렬화 할 수 없습니다 (예 : [1,2,3]).

분류에서Dev

Понимание вложенного массива c ++ в контексте сканирования изображений

분류에서Dev

C / C ++`! a` 대`a == 0`

분류에서Dev

C library in C++

분류에서Dev

arrayMaxConsecutiveSum c #

분류에서Dev

Строка Deflate C #

분류에서Dev

TargetParameterCountException : C #

분류에서Dev

Как предотвратить инициализацию свойств, которых нет в строке JSON во время десериализации в C #?

분류에서Dev

C # SimpleCalculator

분류에서Dev

NetUserChangePassword C ++

분류에서Dev

FormatException C #

분류에서Dev

C # OleDbConnection

분류에서Dev

引用C ++中的C结构

분류에서Dev

dir C: vs dir C:\

분류에서Dev

C ++의 C # COM INTEROP

분류에서Dev

Simplify boolean expression: (a + b)(b'+ c)(a + c) = (a + b)(b'+ c)

분류에서Dev

c / c + 모드의 PHP fopen

분류에서Dev

Julia에서 C / C ++ 호출

분류에서Dev

Schreiben Sie die C ++ - Klasse in C neu

분류에서Dev

Importieren Sie eine C ++ - DLL in C #

분류에서Dev

CRC 16, C에서 C #

분류에서Dev

C #에서 C ++ CopyData API로

분류에서Dev

python -c 'os.system ( "expect -c ...")'

분류에서Dev

C/C++ program without header files

분류에서Dev

Initial typedef struct pointer (C/C++)

분류에서Dev

Link C Flex lexer to C++ parser