0

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

  • 我采用的第一个也是理想的方法与此非常相似。但是我遇到了一个问题,即返回带有 IsReference=true 注释的 JSON 是不行的,尽管如果我返回 XML 就可以了。

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

  • 另一个人可能在解决方案之后尝试使用 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:

  • 另一种解决方案是调用负责调用服务的控制器/操作。我也不喜欢这种方法,因为它是不必要的,因为浏览器可以自行访问服务。
4

1 回答 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));
于 2013-04-10T08:59:54.073 回答