저는 개발자가 아니라는 말로 시작하고 싶습니다. 이것은이 복잡한 문제에 대한 코드를 처음 작성하는 것입니다 (적어도 저에게는). 모든 도움 /지도를 주시면 감사하겠습니다.
이 프로그램의 아이디어는 이름을 입력 한 후 API URL에서 직원 사용자 ID (또는 서명)를 검색하는 것입니다.
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; }
}
}
다음으로 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;
}
}
}
마지막으로 다음 코드는 정보를 검색하고 표시하는 양식에 대한 내 코드입니다.
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] 삭제
몇 마디 만하겠습니다