【问题标题】:Serializing a list of Object using Json.NET使用 Json.NET 序列化对象列表
【发布时间】:2021-09-13 11:42:01
【问题描述】:

我有一个对象模型,如下所示,我将从数据库中检索的数据绑定到该对象模型。

public class Student
{
    public virtual string serialNumber
    { set; get;}

    public virtual string studentFname
    { set; get;}

    public virtual string studentLname
    { set; get;}

    public virtual string studentAge
    { set; get;}
}

会有多个对象,因为有多个学生数据,所以理想情况下我应该将对象绑定到一个集合,最好是一个 LIST,我的要求是我应该将此对象列表传输到另一个代码(Android)。我正在使用 Newtonsoft.Json 并试图将对象转换为 json。但是如果我想将列表传递给另一个代码,我应该将整个列表转换为 Json。因此,我的返回类型应该是什么以及如何为下面的代码序列化它

using Newtonsoft.Json;
public class GetData
{
    public List<Student> getData()
    {
        List<Student> stData = new List<Student>();
        Student st = new Student();
        string con = "Data Source=MK-001/PC; Initial Catalog=Inventory; Persist Security Info=True; User ID=sa; Password=sqlserver;";
        using (SqlConnection myConnection = new SqlConnection(con))
        {
            string query = "Select * from StudentData";
            SqlCommand Cmd = new SqlCommand(query, myConnection);
            myConnection.Open();
            using (SqlDataReader reader = Cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    st.serialNumber = reader["Serial Number"].ToString();
                    st.studentFname = reader["Student Fname"].ToString();
                    st.studentLname = reader["Student Lname"].ToString();
                    st.studentAge = reader["Student Age"].ToString();

                    //Is this the correct way??
                    var jsonObject = JsonConvert.SerializeObject(set);
                    stData.Add(jsonObject);
                }
                myConnection.Close();
            }
        }
        //Im returning a list here. How to bind this to a json and what should be return type as per the change made?
        return stData;
    }
}

【问题讨论】:

  • 返回类型应为字符串,接收方可以将其构造回 Json 对象或填充为 List
  • so 而不是 var jsonObject = JsonConvert.SerializeObject(set);我应该将其设为字符串 jsonObject =JsonConvert.SerializeObject(set)?
  • 即使我将对象值转换为字符串,我如何处理对象列表?
  • 问题不清楚——你检查过我给你的链接吗?

标签: c# asp.net


【解决方案1】:

你应该试试这个:

https://surajdeshpande.com/2013/10/01/json-net-examples/

string jsonString = JsonConvert.SerializeObject(userList);

将 JSON 反序列化为对象:

JsonConvert.DeserializeObject<User>(jsonString);

【讨论】:

  • 感谢 codebased,真的很有帮助。寻找答案的人也会通过@Yuval 提供的解决方案。这也很有帮助。
  • 其实序列化一个List&lt;User&gt;应该是JsonConvert.DeserializeObject&lt;List&lt;User&gt;&gt;(jsonString);
【解决方案2】:

您应该在从数据库加载完 List&lt;Student&gt; 后对其进行序列化;

string jsonObject = JsonConvert.SerializeObject(stData);

并从您的方法中返回 json 字符串:

public string getData()
{  
     // Do stuff
     return jsonString // this is your List<Student> serialized to json
}

另一方面,将其反序列化回JSONObject

JSONArray studentList = new JSONArray(studentJson);

【讨论】:

  • @ Yuval 非常感谢您的回答。但是由于数据库中有多个学生数据,我可能必须返回一个对象列表,或者正如@Codebased 所说,我应该将整个列表转换为字符串并返回字符串。但如果我这样做,我将如何将字符串反序列化回对象?
  • 看看我的代码。我序列化 stData 这是一个 List&lt;Student&gt; 并在另一端反序列化它
  • 我没有注意到你的另一边是android。修改了我的代码。
  • 再次非常感谢。非常有用的答案,但反序列化似乎是从返回的 JsonString(包含 Student 对象列表)创建 Json 对象。但是,如果它包含 100 个数据对象,那么另一端将如何处理呢?不应该转换回 JSONObject 列表吗?
  • 我对 java 类型不是很熟悉。试试JSONArray 吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2019-02-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多