【发布时间】:2015-01-28 00:18:05
【问题描述】:
我正在使用 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; } 是问题所在。我不知道如何访问它并设置用户和密码项。
如果我将它添加到 Param 类中,我可以设置值,但这对我来说似乎是错误的方式/位置。
public Param()
{
data = new List<Datum>();
data.Add(new Datum { user = "user", passwd = "pass" });
}
【问题讨论】:
-
您的问题标题应该是对问题的描述,而不是(您认为适用的)您自己的描述。
-
欢迎来到 Stackoverflow。鉴于这是您的第一个问题,我建议您阅读How to Ask,了解有关此处提问的最佳方式的信息。您的问题对于新手来说非常好,但它可能需要一些改进。例如,标题非常模糊,几乎没有有用的信息。
-
首先,我至少将属性
@params更改为其他内容。 json2csharp 已将@放在名称的开头,因为params是 C# 关键字 - 请参阅 C# language spec 2.4.2: Identifiers。 -
请说明为什么对您来说“这似乎是错误的方式/地点”。当你这样做时,有什么特别不起作用的吗?在不知道这一点的情况下,很难提出没有相同问题的替代方案。
-
@WaiHaLee:因为它是这样工作的(这正是
@语法元素被引入 C# 的原因),并且,看到 JSON 连接,这可能正在处理一些基于反射的序列化/反序列化,该建议最有可能破坏某些东西而不是减少麻烦。
标签: c# json serialization