我似乎无法在OpenRasta文档或教程中找到任何显示如何使用任意JSON对象(即未使用C#类预定义的对象)来接收和响应客户端的内容。
一种方法是使用JsonValue并编写一个自定义编解码器,它只使用JsonValue提供的(反)序列化功能。这应该是非常简单的,不到50行代码,但我想知道OpenRasta中是否没有内置任何东西?
(JsonValue的一个缺点是MS还没有发布它,所以you can't yet deploy it to customers(参见1.“附加使用权利”)。但是在重要的情况下,任何其他Json库,如{{3可以使用。)
答案 0 :(得分:0)
我和大多数人一样,编写了一个非常简单的编解码器,它支持动态作为输入和输出使用json.net处理程序。您也可以使用匿名类型注册该编解码器,它的工作非常出色。你最终得到了这个:
public object Post(dynamic myCustomer) {
return new { response = myCustomer.Id };
}
答案 1 :(得分: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>();