Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top