2011-01-12 10 views
3

Hチャップ、 JSON解析用のServiceStack.Textを使用しようとしています(私が見てきたさまざまなベンチマークではJSON.Netより優れているようです)。しかし、私は期待している結果を得ていない。ServiceStack.Text JSON解析(.Net 4.0)

[DataContract] 
public class RpcRequest<T> 
{ 
    [JsonProperty("id")] 
    [DataMember(Name="id")] 
    public String Id; 

    [JsonProperty("method")] 
    [DataMember(Name="method")] 
    public String Method; 

    [JsonProperty("params")] 
    [DataMember(Name="params")] 
    public T Params; 

    [JsonIgnore] 
    [IgnoreDataMember] 
    public Policy Policy; 
} 

そして、私は設定された値のどれを持っていない、その呼び出しから戻ってインスタンスを取得していますしかし、私はこの

public static class Json 
{ 
    public static T Deserialize<T>(string serialized) 
    { 
     return TypeSerializer.DeserializeFromString<T>(serialized); 
    } 
} 
... 
RpcRequest<Params> myRequeset = Json.Deserialize(packet); 

のようなパーサを呼び出す午前:私は逆シリアル化しようとしていたクラスは次のようになります。すなわちId,MethodおよびParamsはすべてnullです。このAPIを正しく使用していますか?

答えて

9

ServiceStackは、公共分野、唯一のパブリックプロパティをサポートしていないようです。だから私がモデルオブジェクトを次のように変更すると、それはすべて動作します。

[DataContract] 
public class RpcRequest<T> 
{ 
    [JsonProperty("id")] 
    [DataMember(Name="id")] 
    public String Id { get; set; } 

    [JsonProperty("method")] 
    [DataMember(Name="method")] 
    public String Method { get; set; } 

    [JsonProperty("params")] 
    [DataMember(Name="params")] 
    public T Params { get; set; } 

    [JsonIgnore] 
    [IgnoreDataMember] 
    public Policy Policy { get; set; } 
} 

各プロパティにgetterとsetterが追加されていることに注意してください。

2

の代わりにJsonSerializerとしたいと思います。

TypeSerializerは、ここでは彼のブログ上氏Mythzの詳細新fangled JSV形式です:http://www.servicestack.net/mythz_blog/?p=176

+0

あなたは大丈夫です、私はJsonSerializerが欲しかったです。 TypeSerializerは有効なJSONを生成しません。しかし、これは私の問題の原因ではありませんでした – Ceilingfish