ServiceStack.Text JSON SANAING на .NET 4.0
-
10-10-2019 - |
Вопрос
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?
Решение
Похоже, что 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; }
}
Обратите внимание на добавление Getters и Setters к каждому свойству.
Другие советы
Я думаю, ты хочешь JsonSerializer
вместо TypeSerializer
.
TypeSerializer
это новый формат JSV, который подробно рассказывает о своем блоге: http://www.servicestack.net/mythz_blog/?p=176