【问题标题】:Wcf server & Entity Framework problemsWcf 服务器和实体框架问题
【发布时间】:2014-03-30 23:40:21
【问题描述】:

当我知道使用集成库无法做到这一点时,我一直在尝试使用 ef 实体作为源从 wcf restful 服务返回 json 响应。因此,经过一些 3rd 方库谷歌搜索后,我开始了解 Json.net 库,它能够处理 EF 实体。到目前为止一切都很好,图书馆工作并完美地完成了它的工作。但是后来我遇到了重新序列化之前使用 Json.net 库序列化的对象的问题,因为当我返回它时,Visual Studio 集成库再次序列化,所以我不断在输出中得到一些格式错误的 json,其中包含一些反斜杠( \ )。最后我找到了一种方法来返回序列化的json字符串,避免第二次序列化,方法如下:

public Message GetProblems()
{
    using (MojDBEntities context = new MojDBEntities())
    {
        //not a good solution, but ok, till I find a better one
        context.ContextOptions.LazyLoadingEnabled = false;
        var temp = context.Problems.ToList();
        var serializedObject = JsonConvert.SerializeObject(temp);
        return WebOperationContext.Current.CreateTextResponse (serializedObject,
        "application/json; charset=utf-8",
        Encoding.UTF8);
    }
}

它有效。问题是我不想只返回实际的 json 数据,还有另一个名为 status 的字段,它会告诉我响应是否正确完成(例如 status = 0 表示正常,所以我可以继续获取实际的 json 数据)。 如何做到这一点?

【问题讨论】:

    标签: c# json wcf entity-framework serialization


    【解决方案1】:

    这样的?

    var response = new 
    {
        status = 0,
        data = temp
    };
    
    var serializedObject = JsonConvert.SerializeObject(response);   
    
    return WebOperationContext.Current.CreateTextResponse(serializedObject);
    

    但您应该依赖 HTTP 获取状态代码,而不是响应消息本身。

    【讨论】:

    • 做到了,谢谢。我被要求从我在服务中的所有方法中产生一种“统一响应”,我想到了这样的事情。您能否建议我如何在我的案例中涉及 http 状态代码检查?
    • 我看不到您要执行的操作,但您可以考虑返回 HTTP 错误(如 409 Conflict 如果适用)。
    • 我正在构建一个安静的 wcf 服务,稍后我将从 android 客户端使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多