3

伙计们,我正在尝试使用 ServiceStack.Text 进行 JSON 解析(在我见过的各种基准测试中,它的性能似乎比 JSON.Net 更好)。但我没有得到我期望的结果。我试图反序列化的类如下所示:

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

但是,我从没有设置任何值的调用中得到一个实例。即IdMethod并且Params都为空。我是否正确使用了这个 API?

4

2 回答 2

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。

于 2011-03-31T16:54:06.400 回答
2

我想你想要JsonSerializer而不是TypeSerializer.

TypeSerializer是 Mythz 先生在他的博客中详细介绍的一种新奇 JSV 格式:http ://www.servicestack.net/mythz_blog/?p=176

于 2011-01-17T00:13:39.863 回答