Question

H chaps, Je suis en train d'utiliser ServiceStack.Text pour l'analyse JSON (il semble être mieux que d'effectuer JSON.Net dans divers points de référence que je l'ai vu). Mais je ne reçois pas les résultats que je attends. La classe J'essaie de regards délinéariser comme ceci:

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

Et j'invoque l'analyseur comme ceci

public static class Json
{
    public static T Deserialize<T>(string serialized)
    {
        return TypeSerializer.DeserializeFromString<T>(serialized);
    }
}
...
RpcRequest<Params> myRequeset = Json.Deserialize(packet);

Cependant, je reçois un retour d'instance de cet appel qui n'a aucune des valeurs paramétrées. à-dire Id, Method et Params sont tous nuls. Suis-je utiliser correctement cette API?

Était-ce utile?

La solution

Il semble que ServiceStack ne supporte pas les champs publics, seules les propriétés publiques. Donc, si je change mon objet modèle à ce qui suit tout cela fonctionne.

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

Notez l'ajout d'accesseurs à chaque propriété.

Autres conseils

Je pense que vous voulez JsonSerializer au lieu de TypeSerializer.

TypeSerializer est un nouveau-fangled le format JSV que M. Mythz détails sur son blog ici: http: //www.servicestack.net/mythz_blog/?p=176

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top