2011-01-12 2 views
3

H chaps, Я пытаюсь использовать ServiceStack.Text для разбора JSON (он, кажется, работает лучше, чем JSON.Net в различных тестах, которые я видел). Но я не получаю ожидаемых результатов. Класс Я пытаюсь десериализация выглядит следующим образом:ServiceStack.Text JSON синтаксический анализ .Net 4.0

[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 - все null. Я правильно использую этот API?

ответ

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; } 
} 

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

2

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

TypeSerializer является новомодным форматом JSV, что г-н Mythz подробность о своем блоге здесь: http://www.servicestack.net/mythz_blog/?p=176

+0

Вы совершенно правы, мне нужен JsonSerializer. TypeSerializer не производит действительный JSON. Однако это было не совсем причиной моих проблем – Ceilingfish

Смежные вопросы