Newtonsoft.Json.JsonConvert没有正确地反序列化EntityCollection

时间:2015-03-05 07:26:24

标签: json asp.net-mvc c#-4.0 entity-framework-5

我正在尝试从中检索信息的MVC Web App和Web API服务。问题在于CapitalMailOrders实体集合在Web侧反序列化时缺少项目。

服务使用以下内容检索信息

 var result = db.Contacts
        .Include(a => a.IDXPageLinks)
        .Include(b => b.ReboGatewayLoginInfoes)
        .Include(c => c.SocialMedias)
        .Include(d => d.WebSiteInfoes)
        .Include(e => e.ContactImages)
        .Include(f => f.RealtorSetUpProcesses.Select(f1 => f1.CapitalMailOrders)
        .Include(g => g.Contact_CarrierCode_Assignments)
        .FirstOrDefault(c => c.ContactID == id);

此代码很好,并在服务端返回以下内容。下图显示了3个CapitalMailOrders应该是什么。

enter image description here

但是当它在Web端反序列化时,我只得到2,第三个是null

enter image description here

这是Web Side Repository Code

   public Contact Get(int id)
    {
        var responseStream =
            requestMethod.GetResponseStream(
                requestMethod.getRequest("GET", "application/json",
                    string.Format("{0}/api/contact/{1}", restService, id)).GetResponse());

        var contacts = deSerialize<Contact>(responseStream) as Contact;
        return contacts;
    }

deSerialize位于基础存储库类

public class BaseRepository
{
    protected readonly string restService = ConfigurationManager.AppSettings["restService"];

    protected readonly RequestMethod requestMethod = new RequestMethod();
    protected ISerialization _serializer;

    protected BaseRepository()
    { }

    protected object deSerialize<T>(Stream stream)
    {
        var retval = _serializer.DeSerialize<T>(stream);
        return retval;
    }

    protected string serialize<T>(T value)
    {
        var retval = _serializer.Serialize<T>(value);
        return retval;
    }
}


public class JsonNetSerialization : ISerialization
{
    public string Serialize<T>(object o)
    {
        return JsonConvert.SerializeObject((T)o);
    }

    public object DeSerialize<T>(Stream stream)
    {
        return JsonConvert.DeserializeObject<T>(new StreamReader(stream).ReadToEnd());
    }
}

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:0)

post向我指出了问题并提出了解决方案。简而言之,海报@Darin建议使用模型而不是实体集合从web api返回数据集合。由于在将数据序列化回Web应用程序时没有数据绑定到db上下文,因此没有理由承担开销和尝试序列化实体集合的问题。这个blog post更详细。