Creating a dictionary with string,string, string,int and string,object

时间:2017-12-08 05:19:12

标签: c#

I am just getting started with C# and I'm a little stuck.

How do I create a dictionary that contains a mix of string,string, string,int, and string,object?

this is what it would look like:

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

I am using this as the body for a POST request. Sample code from here

var body = new FormUrlEncodedContent(values);

var url = "http://url.com/endpoint"

var resp = await client.PostAsync(url, body);

var respString = await response.Content.ReadAsStringAsync();

3 个答案:

答案 0 :(得分:2)

检查此链接:

HttpClient PostAsJsonAsync request

您可以将其转换为

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; }
}

现在您可以将其用作:

 var myData = await response.Content.PostAsJsonAsync<MyData>(...);

答案 1 :(得分:1)

您可以使用动态。但是,最后,表单post会将所有内容转换为字符串,因此您可能希望先将int和object转换为字符串。然后,您可以使用Dictionary<string, string>

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

答案 2 :(得分:1)

这就是你在评论中所说的:

  

请注意,我来自JavaScript背景,你可以用字典做任何你想做的事。

是的,您可以在JavaScript中执行此操作,但您需要了解并了解C#是一种强类型语言。这并不意味着您必须强大才能输入它,但这意味着类型在编译时(大多数情况下)是已知的。请仔细阅读。

无论如何,要做你想做的事,你可以用Dictionary来做,但它不会很漂亮,而你的C#开发者也不会对你感到满意。那么你如何通过创建一个类(OOP)来给你的键和值一些上下文。如下所示:

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; }
}

现在你有了你的课程,所以你可以创建一个或多个实例:

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;

现在你想发布它并通过网络发送它,所以你需要序列化它。但在您的情况下,您需要将其序列化为JSON。因此,得到NewtonSoft所以它可以为你做所有繁重的工作 - 再说不是说你不强壮。那么你需要做的就是:

var json = JsonConvert.SerializeObject(ro);

现在json将完全像这样,您可以将其发布到以下任何地方:

{
  "key0": {
    "key1": "stringValue1",
    "key2": "stringValue2",
    "key3": "stringValue3",
    "key4": 1000
  },
  "key5": "stringValue4",
  "key6": "stringValue5"
}

我是如何创建课程的?

上面的类名为RootObject,您可以手动创建它,也可以让Visual Studio为您执行此操作。我很懒,所以我让Visual Studio做了。如果你很懒,那么请看我的回答here