H chaps, 我正在尝试使用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);
但是我从该调用中获取了一个没有设置值的实例。即Id
,Method
和Params
均为空。我是否正确使用此API?
答案 0 :(得分: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。
答案 1 :(得分:2)
我认为你想要JsonSerializer
而不是TypeSerializer
。
TypeSerializer
是一种新奇的JSV格式,Mythz先生在他的博客上详细介绍了这些格式:http://www.servicestack.net/mythz_blog/?p=176