EF使用导航属性

时间:2016-03-10 16:42:41

标签: json entity-framework serialization swagger navigational-properties

我正在创建一个API,我需要将数据模型发送到客户端,以便于处理,因此我也不需要在客户端实现和维护json结构,只是序列化一个新的空对象,并将其提供给客户端。

但是出现了我的问题,如果nav属性对象是空的,它就会得到 序列化为空数组

[]

不是数组中的对象 所以我的问题是,有人能指出我正确的方向,用相关属性序列化对象,比如swagger文档是如何做到的那样?

MVC中基本序列化的示例:http://pastebin.com/ihF2AeKY

swagger使用nav props进行序列化的示例,以及类型:http://pastebin.com/SxxztnDa

现在,我可以实例化nav props,并将其添加到对象中,然后对其进行序列化,但这很笨拙,并且不会自动跟踪对象中的更改,就像swagger示例那样。

编辑:

这将是理想的,因为如果我更改基础对象或支柱关系,模型将自动跟随,但由于属性在新对象中为空,除非我手动填充它,导航道具将为null ,或像#39; []'这样的空列表,如基本示例中所示,所以我不会获得导航道具' scheme',只是基础对象。 Swagger在这里做某种魔法,构建完整的树,显示在第二个pastebin中。

[Route("getmodel")]
[HttpGet]
public async Task<Company> GetContactCompanyModel(){
            var ret = new Company();

            return ret;
}

这有点工作,但是笨拙因为我需要用手插入道具,但是这将返回正确的模型,带有填充但空的导航道具。

[Route("getmodel")]
[HttpGet]
public async Task<Company> GetContactCompanyModel(){
            var ret = new Company();
            ret.Peoples.Add(new People { Address = new Address(), PrivateContact = new ContactDetails(), WorkContact = new ContactDetails()});
            ret.ServicePlaces.Add(new ServicePlace { ContactDetails = new ContactDetails(), Address = new Address() });

            return ret;
}

这是我手工制作的new()样板的输出: http://pastebin.com/C4W6Tvsg正如您所看到的,它包含导航属性的空对象,有点像EF将如何为我返回它,所以我可以将它发送到客户端,并使用Angular处理它,即使我添加新属性或字段。

所以最后,问题是我如何遍历对象图,并从中创建一个模式,有点像我会急切加载它,但是有空对象。

希望它能更加清晰。

0 个答案:

没有答案