C#에서 REST API에 액세스 (JSON에서 매개 변수를 교환하고 싶습니다)

6641 단어 JSONC#REST-API

내용



rest if 통신, rest if 액세스
가끔 C#을 사용하기 때문에 자신을 위한 메모

C#에서 rest full API에 액세스하려고하면 꽤 귀찮습니다.

php와 python에서 json을 사용하는 것에 익숙하다면 일일이 클래스를 만들거나 매우 귀찮습니다.
이상은 클래스를 경유해 access 하는 것이 좋지만·· 역시 귀찮아.
클래스를 전제로 만들어야 하는 C#에서는 php, python으로 만들어진 서비스의 버릇에 대해 가는 것이 힘들다.
키의 존재 확인이라든지 할 수 없다든가. . C#이 잘 어울리는 JSON뿐입니다.

환경



패키지 관리자에서 다음을 수행
Install-Package DynamicJson -Version 1.2.0
Install-Package Newtonsoft.Json -Version 12.0.2
Install-Package RestSharp

코드



Elasticsearch에 액세스하는 코드
지정된 시간을 초과하는 문서를 가져오는 샘플
using Newtonsoft.Json;
using RestSharp;
using Codeplex.Data;


/////////////////////////

RestClient client = new RestClient("http://ここにURL.co.jp");
//client.Authenticator = new HttpBasicAuthenticator("username", "password"); 認証が必要な場合

RestRequest request = new RestRequest("/ここにresourceのURL/",Method.POST);

//リクエストJSONは無名で作った方が楽
object x = new { query = new { range = new {
                   occurred_at = new { 
                     gt = "2017-08-16 16:18:00+0900", lte = "now", 
                     format = "yyyy-MM-dd HH:mm:ssZ" } } } };

request.AddJsonBody(x);
request.RequestFormat = DataFormat.Json;

var response = client.Execute(request);

//ここにドキュメントを処理するコード
var jsonObj = DynamicJson.Parse(response.Content);
var total=jsonObj.hits.total;

foreach (var hit in jsonObj.hits.hits)
{

    var at=hit._source.occurred_at;

}



문자열로 액세스
첨자로 좋았습니까?
dynamic djson=DynamicJson.Parse(cjson)
string name=djson["name"]

키 존재 확인

        private bool contains(dynamic value, string index)
        {
            foreach (string key in value.GetDynamicMemberNames())
            {
                if (index.Equals(key))
                {
                    return true;
                }
            }
            return false;
        }


키 존재의 확인이 IEnumerable에서는 할 수 없기 때문에 GetDynamicMemberNames()로 반복해서 검색할 수밖에 없었다.
더 좋은 방법이 있다면 누군가를 알려주십시오.
(ICollection에 먹이면 좋겠지~)
덧붙여: IsDefined를 사용할 수 있는 것을 알았다

좋은 웹페이지 즐겨찾기