Pouvez-vous Instanciez un Objet Instance de JSON .NET?
Depuis les Initialiseurs d'Objets sont très similaires à JSON, et maintenant il ya des Types Anonymes .NET. Ce serait cool d'être en mesure de prendre une chaîne de caractères, tels que JSON, et de créer un Objet Anonyme qui représente la chaîne JSON.
Utiliser les Initialiseurs d'Objets pour créer un Type Anonyme:
var person = new {
FirstName = "Chris",
LastName = "Johnson"
};
Ce serait génial si vous pouviez passer une représentation de chaîne de l'Objet de l'Initialiseur de code (de préférence quelque chose comme JSON) pour créer une instance d'un Type Anonyme.
Je ne sais pas si c'est possible, puisque C# n'est pas dynamique, et le compilateur convertit l'Objet d'Initialiseur und Type Anonyme dans fortement typé code peut s'exécuter. Ceci est expliqué dans cet article.
Peut-être la fonctionnalité de prendre JSON et créer une clé/valeur Dictionnaire avec elle serait le mieux.
Je sais que vous pouvez sérialiser/deserializer un objet JSON .NET, mais ce que je cherche c'est un moyen de créer un objet qui est essentiellement faiblement typé, de la même façon JavaScript fonctionne.
Quelqu'un sait-il la meilleure solution pour ce faire .NET?
Mise à JOUR: Trop préciser le contexte d'pourquoi je vous pose cette question... je pensais de la façon dont C# pourrait mieux soutenir JSON au niveau du langage (peut-être) et j'essayais de penser à des façons que cela peut être fait aujourd'hui, pour des raisons conceptuelles. Donc, je pensais que je poste ici pour commencer une discussion.
OriginalL'auteur Chris Pietschmann | 2008-10-14
Vous devez vous connecter pour publier un commentaire.
Il y a des langues .NET qui ont duck-typing, mais il n'est pas possible avec C# à l'aide de Dot.Notation depuis C# nécessite que toutes les références à des membres sont résolus au moment de la compilation. Si vous souhaitez utiliser la Dot.La Notation, vous devez toujours définir une classe quelque part avec les propriétés requises, et de l'utiliser quelle que soit la méthode que vous souhaitez créer une instance de la classe à partir de données JSON. Pré-définition d'une classe ne avoir des avantages comme le typage fort, l'IDE en charge, y compris intellisense, et ne pas se soucier des fautes d'orthographe. Vous pouvez toujours utiliser les types anonymes:
Très agréable, c'est une façon, je n'ai pas pensé.
ce qui ne pense que la réponse serait depuis maintenant C# prend en charge les types de dynamiques
nikhilk.net/CSharp-Dynamic-Programming-JSON.aspx
OriginalL'auteur Mark Cidade
Vous devriez vérifier le JSON.net projet:
http://james.newtonking.com/pages/json-net.aspx
Vous êtes essentiellement parler de la possibilité de s'hydrater un objet JSON, ce qui ne sera fait. Il ne le fera pas les types anonymes, mais peut-être aurez-vous assez proche.
OriginalL'auteur Jason Jackson
J'ai écrit relativement peu de méthode qui va Parser JSON et retourne un nom/valeur Dictionnaire qui peuvent être accessibles de la même manière le réel de l'objet en JavaScript.
Voici un exemple d'utilisation de la méthode ci-dessous:
Et, voici le code pour le ParseJsonToDictionary méthode:
Je sais que cette méthode peut être un peu rude, et il pourrait probablement être optimisé tout à fait un peu, mais c'est la première version et ça fonctionne, tout simplement.
Aussi, avant de vous plaindre de ne pas utiliser des expressions régulières, gardez à l'esprit que tout le monde ne comprend vraiment des expressions régulières, et de l'écrire de cette façon serait de rendre plus difficile pour les autres de le corriger si nécessaire. Aussi, actuellement, je ne connais pas l'expression régulière que trop bien, et le traitement de chaîne est plus facile.
OriginalL'auteur Chris Pietschmann
Vous ne pouvez pas retourner un type anonyme à partir d'une méthode**, donc un "réhydrater" type anonyme de l'existence serait limitée à la méthode dans laquelle elle est réhydratée. Type de inutile.
** Vous pouvez le retourner comme un objet (ce qui nécessite une réflexion pour accéder à ses propriétés--yeech) ou vous pouvez lancer par exemple", ce qui est inutile, puisqu'il prend des mesures supplémentaires et cela signifie que vous SAVEZ déjà ce que le type de l'objet devrait ressembler, alors pourquoi ne pas simplement créer un objet et de le remplir en premier lieu?
OriginalL'auteur Will
Qu'est-ce que l'application de cette?
Je ne voudrais pas aller en bas de cette route pour quelques raisons.
Première; elle peut exiger beaucoup de soutien de code à l'aide de la réflexion et de tel pour créer la transparence de la méthode que vous êtes en train de parler.
Seconde, comme vous l'avez dit, le C# est un langage fortement typé et des choses comme celles-ci ont été laissés en dehors de la spécification du langage pour une raison.
Troisième, la surcharge pour le faire, ce ne serait pas la peine. Rappelez-vous que les pages web (en particulier les requêtes AJAX) doit être très rapide ou il défait le but. Si vous allez de l'avant et de passer 50% de la sérialisation d'objets entre C# et Javascript alors vous avez un problème.
Ma solution serait de créer une classe qui vient de encapsule un dictionnaire et qui prend une chaîne JSON comme un ctor argument. Puis il suffit de l'étendre à cette catégorie pour chaque type de requête JSON que vous souhaitez gérer. Ce sera un typage fort et plus rapide solution, mais encore de maintenir l'extensibilité et la facilité d'utilisation. L'inconvénient est qu'il n'y a plus de code à écrire, par type de JSON demande.
🙂
OriginalL'auteur nlaq