[英]Noob using C# classes and accessing them
我正在使用JSON(使用json.net)和C#控制台应用程序,并且正在尝试为服务器的JSON POST设置一些值。
我可以设置一些值,但是访问其他值很合适。
我的JSON看起来像这样:
{
"params" : [
{
"url" : "sys/login/user",
"data" : [
{
"passwd" : "pwd",
"user" : "user"
}
]
}
],
"session" : 1,
"id" : 1,
"method" : "exec"
}
我通过json2csharp运行了它,并生成了以下类。
public class Datum
{
public string passwd { get; set; }
public string user { get; set; }
}
public class Param
{
public string url { get; set; }
public List<Datum> data { get; set; }
}
public class RootObject
{
public List<Param> @params { get; set; }
public string session { get; set; }
public int id { get; set; }
public string method { get; set; }
}
然后,我在Main
方法中创建了用于测试的对象
RootObject temp = new RootObject()
temp.id = 1;
temp.method = "exec";
temp.session = "1";
并设置好这些参数。 我还可以使用以下方法设置URL参数:
temp.@params.Add(new Param { url = "some/url", });
它正在设置public List<Datum> data { get; set; }
public List<Datum> data { get; set; }
public List<Datum> data { get; set; }
就是问题所在。 我无法弄清楚如何访问它以及设置用户和密码项。
如果将其添加到Param
类中,则可以设置值,但这对我来说似乎是错误的方式/位置。
public Param()
{
data = new List<Datum>();
data.Add(new Datum { user = "user", passwd = "pass" });
}
好了,您可以这样创建RootObject
:
RootObject temp = new RootObject()
temp.id = 1;
temp.method = "exec";
temp.session = "1";
然后创建params
列表,并用一个Param
填充它:
temp.@params = new List<Param>();
temp.@params.Add(new Param { url = "some/url" });
然后,您可以为列表中的一个参数设置数据(在本示例中为第一个):
temp.@params[0].data = new List<Datum>();
temp.@params[0].data.Add(new Datum { user = "user", passwd = "pass" });
这是必需的,因为@params
是Param
对象的列表。 您还可以在创建Param
实例时填充数据,然后再将其添加到列表中(更容易,因为否则您需要知道列表索引)。
temp.@params = new List<Param>();
Param p = new Param { url = "some/url" };
p.data = new List<Datum>();
p.data.Add(new Datum() { ... });
temp.@params.Add(p);
通常,您需要更改默认的构造函数以已经初始化列表,并通过将属性更改为只读来防止替换列表实例,但这对于JSON反序列化可能效果不佳,因此您确实需要尝试一下。 它看起来像这样:
public class Param
{
public Param()
{
data = new List<Datum>();
}
public string url { get; set; }
public List<Datum> data { get; private set; }
}
public class RootObject
{
public RootObject()
{
@params = new List<Param>();
}
public List<Param> @params { get; private set; }
public string session { get; set; }
public int id { get; set; }
public string method { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.