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();
答案 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。