繁体   English   中英

C#字典作为哈希表的值

[英]c# dictionary as a value of a hashtable

我必须编写一些C#控制台应用程序(但我对.NET的知识几乎为NULL)才能向PHP API发出POST请求,为此我正在使用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的方式,这是一个包含值(哈希表的键值表示法)作为字典的哈希表。 我敢肯定这是愚蠢的,但我真的不知道如何为API设置此JSON,我别无选择,我需要使用C#。 您能帮助我,请给我一些有关如何解决此问题的建议,或者以其他方式解决此问题? 提前致谢。

您可以创建一个类,用作消费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);

使用C#匿名类

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

然后使用newtonsoft json.net

var json = JsonConvert.SerializeObject(payload);

看起来像是一个错字,C#Hashtable不会大写中间的T:

https://msdn.microsoft.com/zh-CN/library/system.collections.hashtable(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM