Περισσότερα
Μετατροπή συμβολοσειράς JSON σε αντικείμενο C#
Προσπαθώ να μετατρέψω ένα αλφαριθμητικό JSON σε αντικείμενο στη C#. Χρησιμοποιώντας μια πολύ απλή περίπτωση δοκιμής:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Το πρόβλημα είναι ότι το routes_list δεν τίθεται ποτέ- είναι ένα απροσδιόριστο αντικείμενο. Καμία ιδέα;
174
3
Φαίνεται ότι προσπαθείτε να αποδιαταχθείτε σε ένα ακατέργαστο αντικείμενο. Θα μπορούσατε να δημιουργήσετε μια Κλάση που αντιπροσωπεύει το αντικείμενο στο οποίο μετατρέπετε. Αυτό θα ήταν πιο χρήσιμο σε περιπτώσεις όπου έχετε να κάνετε με μεγαλύτερα αντικείμενα ή συμβολοσειρές JSON.
Για παράδειγμα:
Τότε ο κώδικάς σας για την αποδιάταξη θα είναι:
Περισσότερες πληροφορίες μπορείτε να βρείτε σε αυτό το σεμινάριο: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
Πιθανόν να μην θέλετε να δηλώσετε την routes_list ως τύπο "αντικειμένου". Δεν έχει την ιδιότητα .test, οπότε πραγματικά δεν πρόκειται να πάρετε πίσω ένα ωραίο αντικείμενο. Αυτό είναι ένα από εκείνα τα σημεία όπου θα ήταν καλύτερα να ορίσετε μια κλάση ή μια δομή, ή να κάνετε χρήση της λέξης-κλειδί dynamic.
Αν θέλετε πραγματικά αυτός ο κώδικας να λειτουργεί όπως τον έχετε, θα πρέπει να γνωρίζετε ότι το αντικείμενο που επιστρέφει η DeserializeObject είναι ένα γενικό λεξικό string,object. Εδώ'είναι ο κώδικας για να το κάνετε με αυτόν τον τρόπο:
Αν θέλετε να χρησιμοποιήσετε τη λέξη-κλειδί dynamic, μπορείτε να διαβάσετε πώς εδώ.
Αν δηλώσετε μια κλάση ή μια δομή, μπορείτε να καλέσετε το Deserialize αντί για το DeserializeObject, όπως παρακάτω:
Εδώ'είναι μια απλή κλάση που συναρμολόγησα από διάφορες αναρτήσεις.... Έχει δοκιμαστεί για περίπου 15 λεπτά, αλλά φαίνεται να λειτουργεί για τους σκοπούς μου. Χρησιμοποιεί το
JavascriptSerializer
για να κάνει τη δουλειά, το οποίο μπορεί να αναφερθεί στην εφαρμογή σας χρησιμοποιώντας τις πληροφορίες που περιγράφονται λεπτομερώς σε αυτό το post.Ο παρακάτω κώδικας μπορεί να εκτελεστεί στο LinqPad για να τον δοκιμάσετε από:
Ελπίζω να βοηθήσει!