【问题标题】:List of Objects To Json StringJson 字符串的对象列表
【发布时间】:2014-11-06 04:41:57
【问题描述】:

如何将对象列表转换为 JSON 字符串?

下面的代码只返回一个属性,People。如何为其添加多个属性?我一直在使用 JsonConvert 将对象更改为 JSON 格式。我会就如何做到这一点开放其他选项/意见。任何帮助将不胜感激!

想要的回应:

{"People":
    {"Person": 
        {"FirstName":"Mike", "LastName":"Smith", "Age":"26"}
    },
    {"Person": 
        {"FirstName":"Josh", "LastName":"Doe", "Age":"46"}
    },
    {"Person": 
        {"FirstName":"Adam", "LastName":"Fields", "Age":"36"}
    }
} 

Person 类

public class Person
{
    public string FirstName { get ;set; }
    public string LastName { get ;set; }
    public int Age { get ;set; }    
}

处理逻辑

public JsonResult GetAllPeople()
{
    List<Person> PersonList = new List<Person>(); 
    String responseJSON = "";

    foreach(string data in something){

        //Some code to get data
        Person p = new Person(); 
        p.FirstName = data.FirstName ;
        p.LastName  = data.LastName 
        p.Age = data.Age;

        responseJSON += new { Person = JsonConvert.SerializeObject(p) };
    }

    return Json(new { People = JsonConvert.SerializeObject(responseJSON ) }, JsonRequestBehavior.AllowGet);

}

【问题讨论】:

  • 您作为“想要的输出”发布的确切字符串不是有效的 JSON。它有一个属性标识符,后跟三个裸对象。
  • 检查一下,它也可能对你有用:stackoverflow.com/questions/26547890/…
  • 更好的方法是使用WebAPI,然后您只需返回List&lt;Person&gt;,框架就会根据请求将其转换为Json(或Xml)。

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

创建一个对象列表。

List<Person> persons = new List<Person>(); 
persons.Add(new Person { FirstName  = "John", LastName = "Doe" });
// etc
return Json(persons, JsonRequestBehavior.AllowGet);

会回来

[{"FirstName":"John", "LastName":"Doe"}, {....}, {....}]

【讨论】:

  • 这不会创建带有 People 数组的对象,这是所需的结果。在序列化之前将其弹出到匿名对象中。
  • @iceburg,不确定 OP 到底想要什么。标题说 对象列表Wanted Response 无效
  • @iceburg 你是对的,但这很好用。它只会使用索引而不是“People”数组属性。
【解决方案2】:

return Json()

实际上将序列化它作为参数的对象。当您传入一个 json 字符串时,它会被双重编码。 使用名为 People 的属性创建一个匿名对象,然后对其进行序列化。 所以你可以:

return Content(JsonConvert.SerializeObject(new {People=PersonList}))

return Json(new {People=PersonList});

【讨论】:

    【解决方案3】:

    您需要添加一个类,我们将其命名为People

    public class People{
        public Person Person{set;get;}
    }
    
    public JsonResult GetAllPeople()
    {
        List<People> PeopleList= new List<People>();
        foreach(string data in something){
        //Some code to get data
        Person p = new Person(); 
        p.FirstName = data.FirstName ;
        p.LastName  = data.LastName 
        p.Age = data.Age;
    
        PeopleList.Add(new People(){Person = p});
        }        
        return Json(new { People = PeopleList },JsonRequestBehavior.AllowGet);
    
    }
    

    这将完全返回您想要的内容

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 2011-05-01
      • 2014-04-07
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多