json.net newtonsoft - Wie kann ich JSON mit C#analysieren?




serialize jsonconvert.deserializeobject (9)

Eine andere native Lösung, die keine Bibliotheken von Drittanbietern, aber einen Verweis auf System.Web.Extensions erfordert, ist der JavaScriptSerializer. Dies ist seit 3.5 kein neues, aber ein sehr unbekanntes eingebautes Feature.

using System.Web.Script.Serialization;

..

JavaScriptSerializer serializer = new JavaScriptSerializer();
objectString = serializer.Serialize(new MyObject());

und zurück

MyObject o = serializer.Deserialize<MyObject>(objectString)

Ich habe den folgenden Code:

var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);

Die Eingabe in responsecontent ist JSON, aber es wird nicht ordnungsgemäß in ein Objekt geparst. Wie sollte ich es richtig deserialisieren?


Ich denke, die beste Antwort, die ich gesehen habe, war @MD_Sayem_Ahmed.

Ihre Frage ist "Wie kann ich Json mit C # analysieren", aber es scheint, als ob Sie Json dekodieren möchten. Wenn Sie es entschlüsseln wollen, ist Ahmeds Antwort gut.

Wenn Sie dies in ASP.NET Web Api versuchen, besteht die einfachste Möglichkeit darin, ein Datenübertragungsobjekt zu erstellen, das die Daten enthält, die Sie zuweisen möchten:

public class MyDto{
    public string Name{get; set;}
    public string Value{get; set;}
}

Sie müssen einfach die Anwendung / JSON-Header zu Ihrer Anfrage hinzufügen (wenn Sie zum Beispiel Fiddler verwenden). Sie würden dies dann in der ASP.NET-Web-API wie folgt verwenden:

//controller method -- assuming you want to post and return data
public MyDto Post([FromBody] MyDto myDto){
   MyDto someDto = myDto;
   /*ASP.NET automatically converts the data for you into this object 
    if you post a json object as follows:
{
    "Name": "SomeName",
      "Value": "SomeValue"
}
*/
   //do some stuff
}

Das hat mir sehr geholfen, als ich in meinem Web Api arbeitete und mein Leben super einfach machte.


Folgendes von der msdn Site sollte meiner Meinung nach helfen, eine native Funktionalität für das zu bieten, wonach Sie suchen. Bitte beachten Sie, dass es für Windows 8 angegeben ist. Ein solches Beispiel von der Website ist unten aufgeführt.

JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}");
double width = jsonValue.GetObject().GetNamedNumber("Width");
double height = jsonValue.GetObject().GetNamedNumber("Height");
string title = jsonValue.GetObject().GetNamedString("Title");
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs");

Es verwendet den Windows.Data.Json Namespace.


Wenn .NET 4 für Sie verfügbar ist, besuchen Sie: http://visitmix.com/writings/the-rise-of-json (archive.org)

Hier ist ein Ausschnitt von dieser Seite:

WebClient webClient = new WebClient();
dynamic result = JsonValue.Parse(webClient.DownloadString("https://api.foursquare.com/v2/users/self?oauth_token=XXXXXXX"));
Console.WriteLine(result.response.user.firstName);

Das letzte Console.WriteLine ist ziemlich süß ...


Ich Json.NET davon aus, dass Sie nicht Json.NET (Newtonsoft.Json NuGet-Paket) verwenden. Wenn dies der Fall ist, dann sollten Sie es versuchen.

Es hat die folgenden Eigenschaften:

  1. LINQ zu JSON
  2. Der JsonSerializer zum schnellen Konvertieren von .NET-Objekten in JSON und zurück
  3. Json.NET kann optional ein gut formatiertes, eingerücktes JSON zum Debuggen oder zur Anzeige erzeugen
  4. Attribute wie JsonIgnore und JsonProperty können zu einer Klasse hinzugefügt werden, um anzupassen, wie eine Klasse serialisiert wird
  5. Möglichkeit, JSON zu und von XML zu konvertieren
  6. Unterstützt mehrere Plattformen: .NET, Silverlight und das Compact Framework

Schauen Sie sich das example unten an. In diesem Beispiel wird die example Klasse zum Konvertieren eines Objekts in und aus JSON verwendet. Es hat zwei statische Methoden für diesen Zweck. Sie sind SerializeObject(Object obj) und DeserializeObject<T>(String json) :

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": "2008-12-28T00:00:00",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

var result = controller.ActioName(objParams);
IDictionary<string, object> data = (IDictionary<string, object>)new System.Web.Routing.RouteValueDictionary(result.Data);
Assert.AreEqual("Table already exists.", data["Message"]);

Probieren Sie den folgenden Code aus:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");

            JArray array = new JArray();
            using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
            {

                using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
                {
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    var objText = reader.ReadToEnd();

                    JObject joResponse = JObject.Parse(objText);
                    JObject result = (JObject)joResponse["result"];
                    array = (JArray)result["Detail"];
                    string statu = array[0]["dlrStat"].ToString();
                }

            }


Wie von vielen anderen erwähnt, unterstützen die meisten Browser JSON.parse und JSON.stringify .

Nun möchte ich hinzufügen, dass wenn Sie AngularJS (was ich sehr empfehlen kann), bietet es auch die Funktionalität, die Sie benötigen:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)

Ich wollte nur etwas über AngularJS hinzufügen, um eine andere Option zu bieten. Beachten Sie, dass AngularJS Internet Explorer 8 (und ältere Versionen) nicht offiziell unterstützt, obwohl die meisten Dinge durch Erfahrung ziemlich gut funktionieren.







c# json json.net deserialization