C#Json.Net使用虚拟属性序列化实体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#Json.Net使用虚拟属性序列化实体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1384字,纯文字阅读大概需要2分钟。
内容图文
![C#Json.Net使用虚拟属性序列化实体](/upload/InfoBanner/zyjiaocheng/793/8042f369898d4bc5a9c2fa3fa4b7d3ce.jpg)
我正在尝试使用虚拟导航属性序列化复杂对象.出于某种原因,当我尝试使用WebApi(从控制器返回)或使用JsonConvert.Serialize(myObject)序列化此对象时,我的所有虚拟属性都为null.当我检查我的对象时,我可以看到所有这些都是代理对象.出于某种原因,json.net对这些代理对象的效果不佳.如何获取序列化的虚拟属性?
解决方法:
正如评论中提到的那样,问题是尝试序列化延迟加载的实体框架属性并不像那样工作.如果链接了所有代理链接,您最终可以通过简单的调用来序列化整个数据库.
因此,在序列化时,任何未显式加载的内容都将被赋予空值.每当您尝试加载代理对象时,都会进行数据库调用(每个对象一次).
你可以通过多种不同方式解决这个问题.想象一下,你有以下实体对象:
public class Person
{
public int ID
public string PersonName
public Address PersonAddress
}
public class Address
{
public int ID
public string AddressLine
}
假设你像这样加载你的实体:
Person myPerson = ObjectContext.CreateObjectSet<Person>.Where(p => p.ID == 1);
你可以这样做(不是真的推荐,因为它会创建两个独立的数据库调用):
Person myPerson = ObjectContext.CreateObjectSet<Person>.Where(p => p.ID == 1);
var x = myPerson.Address;
更好的方法是:
Person myPerson = ObjectContext.CreateObjectSet<Person>
.Include("PersonAddress")
.Where(p => p.ID == 1);
这样可以避免相关对象完全延迟加载.
巨大的警告
如果您尝试执行任何嵌套的eager加载(假设您有一个AddressCountry对象,并且希望通过将include更改为.Include(“PersonAddress.AddressCountry”)来加急加载),则会出现严重的性能问题,尤其是如果您有大型数据集.
内容总结
以上是互联网集市为您收集整理的C#Json.Net使用虚拟属性序列化实体全部内容,希望文章能够帮你解决C#Json.Net使用虚拟属性序列化实体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。