【问题标题】:Newtonsoft.Json.JsonConvert not Deserializing EntityCollection ProperlyNewtonsoft.Json.JsonConvert 未正确反序列化 EntityCollection
【发布时间】:2015-03-05 07:26:24
【问题描述】:

我有一个 MVC Web 应用程序和一个 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。

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

这里是 Web 端存储库代码

   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());
    }
}

有什么想法吗?谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2021-09-15
      • 2022-01-10
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多