словарь c# как значение hashtable

Я должен кодировать небольшое консольное приложение C# (но мои знания о .NET почти нулевые), чтобы сделать запрос POST к API PHP, для которого я использую экземпляр HttpClient. API принимает такой JSON

{
    "User": {
        "email": "email@host.com",
        "password": "something"
    },
    "Establishment": {
        "id": 147
    }
}

После проведения некоторых исследований о том, как это сделать то, что я сделал до сих пор это:

        static async Task RunAsync()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://italdelo.web.development.co/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                try
                {
                    // HTTP POST
                    Dictionary<string, string> user = new Dictionary<string, string>();
                    Dictionary<string, int> establishment = new Dictionary<string, int>();
                    HashTable postdata = new HashTable();

                    user.Add("email","email@host.com");
                    user.Add("password","something");
                    establishment.Add("id",147);
                    postdata.Add("User",user);
                    postdata.Add("Establishment",establishment);


                    HttpResponseMessage response = await client.PostAsJsonAsync("apiname/service", postdata);
                    response.EnsureSuccessStatusCode();    // Throw if not a success code.
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine("Exception details: " + e.ToString());
                }
            }
        }

Запуск этого кода я получил это сообщение об ошибке:

Severity    Code    Description Project File    Line    Suppression State Error CS0246  The type or namespace name 'HashTable' could not be found (are you missing a using directive or an assembly reference?) ProjectName C:Users...Program.cs 47  Active

Я знаю, что ошибка заключается в том, как я пытаюсь настроить JSON для отправки в API, который является хэш-таблицей, содержащей значения (обозначение ключа-значения hashtable) в качестве словарей. Я уверен, что это глупо, но я действительно не знаю, как настроить этот JSON для API, у меня нет выбора, мне нужно использовать C#. Вы можете помочь мне, пожалуйста, давая мне некоторые советы о том, как исправить это или сделать это другим способом? Спасибо заранее.

3 ответа

  1. можно создать класс, который будет служить параметром для потребления API.

    //you classes
    public class Parameter
    {
      public User user { get; set;}
      public Establishment {get; set;}
    }
    public class User
    {
        public string email {get; set;}
        public string password {get; set}
    }
    
    public class Establishment
    {
        public int id {get;set;}
    }
    

    //в методе вызова api:

    `var p = new Parameter
            {
                Establishment = new Establishment
                {
                    id = 123
                },
                User = new User
                {
                    email = "email",
                    password = "password"
                }
            };
    

    HttpResponseMessage response = await client.PostAsJsonAsync("apiname/service", p);

  2. Использование анонимных классов c#

    var payload = new{
        User=new {
            email= "email@host.com",
            password= "something"
        },
        Establishment=new {
            id= 147
        }
    }
    

    затем используйте newtonsoft json.net

    var json = JsonConvert.SerializeObject(payload);