[英]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.