首页 文章

JSON和jQuery中的WCF Rest服务

提问于
浏览
0

我在JSON中暴露WCF REST服务并尝试从jQuery中使用它时遇到了一些问题 .

  • 我采取的第一个和期望的方法与this非常相似 . 但是我遇到的问题是,使用IsReference = true注释返回JSON不行,但是如果我返回XML就可以了 .

  • 第二种方法是返回XML并使用它在jQuery中播放 . 但由于jQuery喜欢JSON,我不喜欢这个选项 .

  • 另一个人可能在this解决方案之后尝试使用JSON.Net,但在描述中作者说它不建议用于 生产环境 .

  • 我现在拥有的第一种方法是注释IsReference = false,我认为这有点危险,并且为了解决循环引用,我手动删除了这些循环,例如:


var queryResult =
    from a in DbContext.Programs.Include(x => x.Radios)
    where ProgramsIds.Contains(a.Id)
    select a;

foreach (Program p in queryResult)
{
    p.Radio = null;
    p.Messages = new List<Message>();
}

我不喜欢这个解决方案,但我不知道哪个不那么糟糕 .

我想很多人可能有这个问题,你采取了哪种解决方案?

谢谢!!

编辑1:

  • 另一种解决方案是调用Controller / Action,该Controller负责调用服务 . 由于浏览器可以单独使用该服务,因此我也不需要这样做 .

1 回答

  • 0

    JSON.Net正确处理对象/引用层次结构 . 因此,只需使用JSON.Net序列化程序(或使用ServiceStack.Text序列化程序)从queryResult获取json字符串,并从服务方法返回Stream:

    [OperationContract, WebGet(UriTemplate = "/GetJson", BodyStyle = WebMessageBodyStyle.Bare)] //ResponseFormat = WebMessageFormat.Json
    Stream GetJSON(); 
    
    ....
    return new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
    

相关问题