ServiceStack.Text Разбор JSON в .Net 4.0 - PullRequest
3 голосов
/ 12 января 2011

H парни, я пытаюсь использовать 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?

Ответы [ 2 ]

9 голосов
/ 31 марта 2011

Кажется, что 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; }
}

Обратите внимание на добавление геттеров и сеттеров к каждому свойству.

2 голосов
/ 17 января 2011

Я думаю, что вы хотите JsonSerializer вместо TypeSerializer.

TypeSerializer - это новый формат JSV, который мистер Митц подробно описывает в своем блоге здесь: http://www.servicestack.net/mythz_blog/?p=176

...