0

我似乎在 OpenRasta 文档或教程中找不到任何内容来说明如何使用任意 JSON 对象(即未使用 C# 类预定义的对象)来接收和响应客户端。

一种方法是使用JsonValue并编写一个自定义编解码器,该编解码器将仅使用 JsonValue 提供的(反)序列化功能。这应该很简单,不到 50 行代码,但我想知道 OpenRasta 中是否没有内置任何东西?

(JsonValue 的一个缺点是 MS 尚未发布它,因此您还不能将其部署给客户(参见 1.“附加使用权利”)。但在重要的情况下,任何其他 Json 库,如Json。 NET可以使用。)

4

2 回答 2

0

像大多数人一样,我编写了一个非常简单的编解码器,它支持动态作为使用 json.net 处理程序的输入和输出。您还可以使用匿名类型注册该编解码器,并且效果非常好。你最终得到这个:

public object Post(dynamic myCustomer) {
  return new { response = myCustomer.Id };
}
于 2011-09-15T11:30:59.490 回答
0

我刚刚使用 JsonFx 实现了一个 JSON 编解码器。它是这样的:

using System.IO;
using System.Text;
using JsonFx.Json;


namespace Example
{
  [global::OpenRasta.Codecs.MediaType("application/json")]
  public class JsonFXCodec : global::OpenRasta.Codecs.IMediaTypeWriter, global::OpenRasta.Codecs.IMediaTypeReader
  {
    public void WriteTo(object entity, global::OpenRasta.Web.IHttpEntity response, string[] codecParameters)
    {
      JsonWriter json = new JsonWriter();
      using (TextWriter w = new StreamWriter(response.Stream, Encoding.UTF8))
      {
        json.Write(entity, w);
      }
    }


    public object ReadFrom(global::OpenRasta.Web.IHttpEntity request, global::OpenRasta.TypeSystem.IType destinationType, string destinationName)
    {
      JsonReader json = new JsonReader();
      using (TextReader r = new StreamReader(request.Stream, Encoding.UTF8))
      {
        return json.Read(r, destinationType.StaticType);
      }
    }


    public object Configuration { get; set; }
  }
}

如果它是为“对象”注册的,那么它似乎适用于任何类:

ResourceSpace.Has.ResourcesOfType<object>()
                 .WithoutUri
                 .TranscodedBy<JsonFXCodec>();
于 2012-05-30T11:07:37.017 回答