Noob使用C#类并访问它们

Noob使用C#类并访问它们,c#,json,serialization,C#,Json,Serialization,我正在使用JSON(使用JSON.net)和一个C#console应用程序,并试图为发送到服务器的JSON帖子设置一些值 我可以设置一些值,但访问其他值会让我感到舒服 我的JSON如下所示: { "params" : [ { "url" : "sys/login/user", "data" : [ { "passwd" : "pwd",

我正在使用JSON(使用JSON.net)和一个C#console应用程序,并试图为发送到服务器的JSON帖子设置一些值

我可以设置一些值,但访问其他值会让我感到舒服

我的JSON如下所示:

{
    "params" : [
         {
             "url" : "sys/login/user",
             "data" : [
                 {
                     "passwd" : "pwd",
                     "user" : "user"
                 }
             ]
         }
    ],
    "session" : 1,
    "id" : 1,
    "method" : "exec"
}
RootObject temp = new RootObject()
temp.id = 1;
temp.method = "exec";
temp.session = "1";
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; }
}
我通过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; }
}
这些参数设置得很好。 我还可以使用以下方法设置URL参数:

temp.@params.Add(new Param { url = "some/url", });
设置问题出在
公共列表数据{get;set;}
项上。我不知道如何访问它并设置用户和密码项

如果我将其添加到
Param
类中,我可以设置值,但对我来说,这似乎是错误的方式/位置

public Param()
{
   data = new List<Datum>();            
   data.Add(new Datum { user = "user", passwd = "pass" });
}      
public参数()
{
数据=新列表();
添加(新数据{user=“user”,passwd=“pass”});
}      

好吧,您可以像这样创建
根对象

{
    "params" : [
         {
             "url" : "sys/login/user",
             "data" : [
                 {
                     "passwd" : "pwd",
                     "user" : "user"
                 }
             ]
         }
    ],
    "session" : 1,
    "id" : 1,
    "method" : "exec"
}
RootObject temp = new RootObject()
temp.id = 1;
temp.method = "exec";
temp.session = "1";
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; }
}
然后创建
params
列表并用一个
Param
填充它:

temp.@params = new List<Param>();
temp.@params.Add(new Param { url = "some/url" });
通常,您会更改默认构造函数来初始化列表,并通过将属性更改为只读来防止列表实例被替换,但这可能不适合JSON反序列化,因此您确实需要尝试一下。它看起来是这样的:

{
    "params" : [
         {
             "url" : "sys/login/user",
             "data" : [
                 {
                     "passwd" : "pwd",
                     "user" : "user"
                 }
             ]
         }
    ],
    "session" : 1,
    "id" : 1,
    "method" : "exec"
}
RootObject temp = new RootObject()
temp.id = 1;
temp.method = "exec";
temp.session = "1";
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; }
}
公共类参数
{
公共参数()
{
数据=新列表();
}
公共字符串url{get;set;}
公共列表数据{get;private set;}
}
公共类根对象
{
公共根对象()
{
@params=新列表();
}
public List@params{get;private set;}
公共字符串会话{get;set;}
公共int id{get;set;}
公共字符串方法{get;set;}
}

您的问题标题应该是对问题的描述,而不是(您认为适用的)您自己。欢迎使用Stackoverflow。鉴于这是您的第一个问题,我建议您在这里阅读有关提问最佳方式的信息。对于新手来说,你的问题很好,但需要改进。例如,标题非常模糊,包含的有用信息很少。首先,我至少要将属性
@params
更改为其他内容。json2csharp将
@
放在名称的开头,因为
params
是一个C#关键字-请参阅。请指定为什么您认为“这似乎是错误的方式/位置”。当你这样做的时候,有没有什么特别的东西不起作用?如果不知道这一点,就很难提出一个没有同样问题的替代方案。@WaiHaLee:因为它是这样工作的(这就是为什么C#中引入了
@
语法元素),而且,看到JSON连接,这可能是在处理一些基于反射的序列化/反序列化,这个建议很可能会破坏某些东西,而不是减少麻烦。您应该为只读属性提供私有setter,否则会产生问题。非常感谢!这正是我前进所需要的。也谢谢你给我的关于二传手的提示,