>

C #을 시작하고 조금 붙어 있습니다.

문자열, 문자열, 문자열, 정수 및 문자열, 객체가 혼합 된 사전을 어떻게 만듭니 까?

이것은 다음과 같습니다 :

var values = new Dictionary<????>
{
    "key0": 
         {
         "key1": "stringValue1",
         "key2": "stringValue2",
         "key3": "stringValue3",
         "key4": 10000
         },
    "key5": "stringValue4",
    "key6": "stringValue5"
};

나는 이것을 POST 요청의 본문으로 사용하고 있습니다. 여기

의 샘플 코드
var body = new FormUrlEncodedContent(values);
var url = "http://url.com/endpoint"
var resp = await client.PostAsync(url, body);
var respString = await response.Content.ReadAsStringAsync();


  • 답변 # 1

    이것은 당신의 의견에서 말한 것입니다 :

    와이즈 비즈

    예. JavaScript로 그렇게 할 수 있지만 C #은 강력한 형식의 언어라는 것을 배우고 이해해야합니다. 그렇다고 타이핑을 강하게해야한다는 의미는 아니지만 컴파일 타임에 유형이 알려진다는 의미입니다. 읽어보세요.

    어쨌든, 원하는 일을하려면

    please note that I come from a JavaScript background where you can do whatever you want with a dictionary.

    로 할 수 있습니다  그러나 그것은 예쁘지 않을 것이고 동료 C # 개발자들은 당신에게 만족하지 않을 것입니다. 클래스 (OOP)를 만들어서 키와 값에 컨텍스트를주는 방법은 어떻습니까? 아래와 같은 것 :

    Dictionary
    
    

    이제 수업을 하나 이상 만들 수 있습니다 :

    public class Rootobject // Give it a better name
    {
        public Key0 key0 { get; set; }
        public string key5 { get; set; }
        public string key6 { get; set; }
    }
    public class Key0
    {
        public string key1 { get; set; }
        public string key2 { get; set; }
        public string key3 { get; set; }
        public int key4 { get; set; }
    }
    
    

    이제 POST를하고 유선으로 보내서 직렬화해야합니다. 그러나 귀하의 경우 JSON으로 직렬화해야합니다. 따라서 NewtonSoft를 사용하면 힘이 들지 않는다고 말할 수 없습니다. 그럼 당신이해야 할 일은 이것입니다 :

    var ro = new Rootobject();
    ro.key5 = "stringValue4";
    ro.key6 = "stringValue5";
    var key0 = new Key0();
    key0.key1 = "stringValue1";
    key0.key2 = "stringValue2";
    key0.key3 = "stringValue3";
    key0.key4 = 1000; // See we cannot put a string here. Different than JavaScript
    ro.key0 = key0;
    
    

    이제 var json = JsonConvert.SerializeObject(ro);  정확히 이와 같으며 어디에서나 POST 할 수 있습니다 :

    json
    
    
    <시간>

    클래스는 어떻게 만들었습니까?

    위의 이름은 { "key0": { "key1": "stringValue1", "key2": "stringValue2", "key3": "stringValue3", "key4": 1000 }, "key5": "stringValue4", "key6": "stringValue5" } , 수동으로 만들거나 Visual Studio에 요청하십시오. 게 으르므로 Visual Studio에 요청했습니다. 당신이 게으른 경우 여기에 내 대답을 참조하십시오.

  • 답변 # 2

    이 링크 확인 :

    HttpClient PostAsJsonAsync 요청

    로 캐스팅 할 수 있습니다

    RootObject
    
    

    그러면 다음과 같이 사용할 수 있습니다 :

    var myData = await response.Content.PostAsJsonAsync<Dictionary<string, dynamic>>(...);
    
    

    구조를 사용하여 클래스를 만들고 string myStr = myData["key5"]; 에서 클래스 이름을 사용하는 것이 좋습니다.

    샘플 클래스 :

    <>
    
    

    이제 다음과 같이 사용할 수 있습니다 :

    class MyData {
        public MyData2 key0 { get; set; }
        public string key5 { get; set; }
        public string key6 { get; set; }
    }
    class MyData2 {
        public string key1 { get; set; }
        public string key2 { get; set; }
        public string key3 { get; set; }
        public int key4 { get; set; }
    }
    
    

  • 답변 # 3

    동적을 사용할 수 있습니다. 그러나 결국 양식 포스트는 모든 것을 문자열로 변환하므로 int와 object를 먼저 문자열로 변환하려고 할 수 있습니다. 그런 다음 var myData = await response.Content.PostAsJsonAsync<MyData>(...); 를 사용할 수 있습니다.

    Dictionary<string, string>
    
    
    Dictionary<string, dynamic> Dict = new Dictionary<string, dynamic>(); Dict.Add("string1", "1"); Dict.Add("string2", 2); Dict.Add("string3", new object());

  • 이전 여러 옵션 스칼라에서 효과적인 패턴 매칭 방법
  • 다음 javascript - vue js에서 라디오 버튼을 사용할 때 v 모델이 업데이트되지 않습니까?