ServiceStack.Text JSON .Net 4.0 sur l'analyse syntaxique
-
10-10-2019 - |
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?
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