新手使用 C# 类 并访问它们
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 生成了以下 classes.
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; }
项上。我不知道如何访问它并设置用户和密码项。
如果我将它添加到 Param
class 我可以设置值,但这对我来说似乎是错误的 way/place。
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; }
}
我正在使用 JSON(使用 json.net)和 C# 控制台应用程序,我正在尝试将 JSON POST 的一些值设置为服务器。
我可以设置一些值,但访问其他值让我感到不适。
我的 JSON 看起来像这样:
{
"params" : [
{
"url" : "sys/login/user",
"data" : [
{
"passwd" : "pwd",
"user" : "user"
}
]
}
],
"session" : 1,
"id" : 1,
"method" : "exec"
}
我 运行 通过 json2csharp 生成了以下 classes.
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; }
项上。我不知道如何访问它并设置用户和密码项。
如果我将它添加到 Param
class 我可以设置值,但这对我来说似乎是错误的 way/place。
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; }
}