Obtenir une liste de JSON noms de propriétés d'une classe à utiliser dans une chaîne de requête
Si j'ai un C# de la classe du modèle qui est utilisé par JSON.net pour lier des données à partir d'un sérialisé chaîne JSON, est-il un moyen que je puisse créer une chaîne de requête à partir de cette classe afin de faire la demande initiale?
De la classe du modèle exemple:
public class model
{
[JsonProperty(PropertyName = "id")]
public long ID { get; set; }
[JsonProperty(PropertyName = "some_string")]
public string SomeString {get; set;}
}
Querystring exemple:
baseUrl + uri + "&fields=id,some_string" + token
Donc l'essence de ce que je suis en train de faire est de recueillir à la fois "id" et "chaîne_quelconque" à partir du modèle de l'objet afin que je puisse créer dynamiquement un "&les champs" arguments. Merci!
Vous devez vous connecter pour publier un commentaire.
@Leigh Shepperson a la bonne idée; cependant, vous pouvez le faire avec moins de code à l'aide de LINQ. Je voudrais créer une méthode d'assistance comme ceci:
Vous pouvez l'utiliser comme ceci:
MODIFIER
Si vous êtes en cours d'exécution en vertu de la version 3.5 .Net Framework tels que vous n'avez pas le générique
GetCustomAttribute<T>
méthode disponible pour vous, vous pouvez faire la même chose avec les non-génériqueGetCustomAttributes()
méthode au lieu de cela, utiliser avecSelectMany
etCast<T>
:Unity3d
, mais puisque la question ne semble pas avoir quelque chose à voir avec cela, je l'ai retiré et a ajoutéJson.Net
à sa place. J'ai mis à jour ma réponse à montrer comment vous pouvez utiliser la non-génériqueGetCustomAttributes()
méthode pour faire la même chose .NET 3.5.JsonPropertyAttribute
et je suis denull
exceptions. Comment cela peut-ilLinq
être modifiées afin d'aider qui?[JsonProperty(PropertyName = "XXX")]
attributs plutôt que de tomber en arrière sur le c# nom de la propriété. Vous devriez vraiment poser une autre question au sujet de cette situation, mais j'ai ajouté une autre réponse de quoi faire dans une telle situation.Vous pouvez le faire en utilisant la réflexion. C'est l'idée générale:
Dans les cas où le modèle n'est que partiellement annoté avec
[JsonProperty(PropertyName = "XXX")]
attributs, ou est annoté avec contrat de données des attributs, ou a ignoré propriétés, vous pouvez utiliser Json.NET's propre contrat de résolution pour obtenir la liste des sérialisé noms de propriété. Tout d'abord, place de la méthode d'extension:Alors, n':
Pour
resolver
utilisationCamelCasePropertyNamesContractResolver
si vous êtes chameau boîtier vos noms de propriété (qui ASP.NET Web de Base de l'API ne par défaut); sinon, utilisezDefaultContractResolver
.Échantillon violon.