2011-09-15 6 views
0

OpenRasta 문서 또는 자습서에서 클라이언트로부터받은 응답에 대해 임의의 JSON 객체 (즉, C# 클래스를 사용하여 미리 정의되지 않은 객체)를 사용하는 방법을 보여주는 아무것도 찾을 수 없습니다. .OpenRasta에서 임의의 JSON 객체 사용

JsonValue을 사용하고 JsonValue에서 제공하는 (비) 직렬화 기능을 사용하는 사용자 정의 코덱을 작성하는 것이 한 가지 방법입니다. 그건 꽤 간단하고 50 줄 미만의 코드 일 것입니다. 그러나 OpenRasta에 내장 된 것이 없는지 궁금합니다.

(JsonValue의 단점은 MS가 아직 출시하지 않았기 때문에 you can't yet deploy it to customers (1. "추가 사용 권한"참조). 그러나 중요한 경우에는 Json.NET과 같은 다른 Json 라이브러리를 사용할 수 있습니다.

답변

0

대부분의 사람들처럼 json.net을 사용하여 처리기에 입력 및 출력으로 역학을 지원하는 매우 간단한 코덱을 작성했습니다. 익명 형식으로 해당 코덱을 등록 할 수도 있으며 훌륭하게 작동합니다. 당신은 이것으로 끝납니다 :

public object Post(dynamic myCustomer) { 
    return new { response = myCustomer.Id }; 
} 
+0

모든 사람이 사용할 수 있도록 구현을 공유하고 싶으십니까? 일반적으로 클래스 파일을 지정할 수없는 동적 JSON 객체를 허용하는 REST API로 작업 할 때 일반적인 용도로 보입니다. 당신은 OpenRasta의 저자입니다, 그렇죠? 나는 당신이 그것을 온라인에 놓을만한 장소를 찾을 것이라고 생각한다 : :) P.S. 귀하의 암묵적인 대답은 : "OpenRasta에 내장 된 것은 아무것도 없습니다."맞습니까? –

+1

이번 주말에 오픈 랩에서 패키지를 푸시 할 수 있습니다. 오히려 간단합니다. 블로그 게시물을 가치있게 생각할 수도 있습니다. OpenRasta에서 사용할 수있는 속임수 중 하나는 URI가 상속되지 않는 리소스에 대한 등록이므로 에 등록하면 개체 (모든 것)에서 상속 된 항목이 코덱으로 전송 될 수 있습니다. – SerialSeb

+0

그것은 굉장 할 것입니다. 당신이 주변에 있다면, 당신의 대답에 덧붙여주십시오. –

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>();