【问题标题】:Create a json formatted object创建一个 json 格式的对象
【发布时间】:2014-04-10 17:40:49
【问题描述】:

我在 C#/aspx 中创建了这个 JSON 数组:

[
 {
 nome: "test",
 apelido: "test"
 }
]

我想像这样创建 JSON:

{
  success: 1, 
  error: 0, 
  gestor: "test", 
  cliente: [
    {
      nome: "test",
      apelido: "test"
    } 
  ]
}

这是我拥有的代码:

var gestor = new JArray();
foreach (System.Data.DataRow item in com.Execute("select * from utilizadores").Rows)
{
    gestor.Add(new JObject(new JProperty("nome", item["first_name"].ToString()),
               new JProperty("apelido", item["last_name"].ToString())));
}
context.Response.Write(gestor);

【问题讨论】:

  • 这实际上不是 JSON,因为您在这个问题中拥有它。其次,我认为创建一个具有适当属性的类然后对其进行序列化比尝试像这样手动创建它要容易得多。
  • 但是怎么做???你能帮忙吗?
  • 在下面查看我的答案。确切地了解您正在尝试做的事情有点困难,但希望它至少可以为您指明正确的方向。

标签: c# asp.net json httphandler


【解决方案1】:

我会为此创建一个类(实际上是 2 个):

public class MyClass
{
    public int success { get; set; }
    public int error { get; set; }
    public string gestor { get; set; }
    public List<Cliente> cliente { get; set; }
}

public class Cliente
{
    public string nome { get; set; }
    public string apelido { get; set; }
}

现在您可以循环填充这些对象的列表:

var myObj = new MyClass();
myObj.cliente = new List<Cliente>();

foreach (System.Data.DataRow item in com.Execute("select * from utilizadores").Rows)
{
     myObj.cliente.Add(new Cliente() 
     {
         nome = item["first_name"].ToString(),
         apelido = item["last_name"].ToString()
     };
}

// assuming that is successful
myObj.success = 1;
// not sure how you wanted this to be populated:
myObj.gestor = "test";

现在序列化它你可以这样做:

context.Response.Write(JsonConvert.SerializeObject(myObj));

Charles 对匿名类的建议也很好,如果你对这个类没有其他用途,而且它不是太复杂。

【讨论】:

    【解决方案2】:

    最简洁的方法就是使用匿名类,如果你把它扔给一些客户端代码,而不是在服务器端代码的其他地方再次弄乱这个确切的对象,这是处理它的最简单方法.

    var outputString = JsonConvert.SerializeObject(new { 
            success=1, 
            error=0, 
            gestor="test", 
            cliente = (from System.Data.DataRow i in com.Execute("select * from utilizadores").Rows 
                      select new { 
                         nome=item["first_name"],
                         apelido= item["last_name"] 
            }).ToArray()
    });
    

    【讨论】:

    • JObjectJArray 的使用强烈表明 OPis 已经在使用Json.Net
    • @MattBurland 谢谢你,没有广泛使用这个库,所以对这些类不熟悉,编辑删除了建议
    • @CharlesKeyser:NP。只是不想让 OP 误以为他们需要别的东西。 JObjectJArray 类实际上只有在您需要对序列化进行非常精确的控制时才需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多