繁体   English   中英

序列化嵌套对象(列表)

[英]Serialize nested objects(list)

我正在尝试序列化课程数据。 我得到课程ID(C_id)和课程名称(C_Name)。 我得到的另一件事是学生的I选。 当我尝试对此进行序列化时,无法获得已报名参加该课程的学生的嵌套列表。

var u = (from g in t.courses 
         select g)
        .ToList();

List<course> ui = u
    .Select(d => new course() 
        { C_Name = d.C_Name, 
          C_Id = d.C_Id, 
          student = d.student 
        })
    .ToList();

ASCIIEncoding objASCIIEncoding = new ASCIIEncoding();

string strData = JsonConvert
    .SerializeObject(ui, Formatting.Indented, new JsonSerializerSettings()
{
    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
});

在上面的代码中,我使用嵌套的students列表获取了正确的数据,但是当这行

string strData = JsonConvert.SerializeObject(ui, Formatting.Indented, new JsonSerializerSettings()
{
    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
});

执行我只会得到课程ID(C_ID)和课程名称(C_Name)。 嵌套的student列表未序列化。

从文档中:

Json.NET将忽略引用循环中的对象,而不对它们进行序列化。 第一次遇到对象时,它将照常进行序列化,但是如果将该对象作为自身的子对象遇到,则序列化程序将跳过对其进行序列化。

http://james.newtonking.com/json/help/index.html?topic=html/SerializationSettings.htm

我假设您的学生参考了他们的课程? 也许您应该通过执行与以下类似的操作来删除对课程的引用,以确保他们不会这么做:

student = d.student.Select(s => new {s.studentId, s.studentName}).ToList()

希望这对http://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm有帮助

JsonSerializer上的PreserveReferencesHandling设置将更改所有对象的序列化和反序列化方式。 为了更好地控制应序列化哪些对象和成员作为参考,JsonObjectAttribute,JsonArrayAttribute和JsonPropertyAttribute上具有IsReference属性。 将JsonObjectAttribute或JsonArrayAttribute上的IsReference设置为true意味着JsonSerializer将始终序列化该属性所针对的类型作为引用。 将JsonPropertyAttribute上的IsReference设置为true将仅序列化该属性作为引用。

[JsonObject(IsReference = true)]
public class EmployeeReference
{
    public string Name { get; set; }
    public EmployeeReference Manager { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM