JSON-tekenreeks converteren naar C#-object

Proberen een JSON-tekenreeks om te zetten in een object in C#. Een heel eenvoudige testcase gebruiken:

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");

Het probleem is dat routes_list nooit wordt ingesteld; het is een ongedefinieerd object. Enig idee?


Antwoord 1, autoriteit 100%

Of u kunt de Newtownsoft.Json-bibliotheek als volgt gebruiken:

using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);

Waar Tuw objecttype is dat overeenkomt met uw JSON-tekenreeks.


Antwoord 2, autoriteit 49%

Het lijkt erop dat u probeert te deserialiseren naar een onbewerkt object. U kunt een klasse maken die het object vertegenwoordigt waarnaar u converteert. Dit zou vooral handig zijn in gevallen waar je te maken hebt met grotere objecten of JSON Strings.

Bijvoorbeeld:

 class Test {
      String test; 
      String getTest() { return test; }
      void setTest(String test) { this.test = test; }
  }

Dan zou uw deserialisatiecode zijn:

  JavaScriptSerializer json_serializer = new JavaScriptSerializer();
   Test routes_list = 
          (Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");

Meer informatie vindt u in deze zelfstudie:
http://www.codeproject.com/Tips/79435/Deserialize -JSON-met-Csharp.aspx


Antwoord 3, autoriteit 21%

Je wilt routes_list waarschijnlijk niet zomaar declareren als een object-type. Het heeft geen .test-eigenschap, dus je krijgt echt geen mooi object terug. Dit is een van die plaatsen waar u beter een klasse of een struct kunt definiëren, of het dynamische trefwoord kunt gebruiken.

Als je echt wilt dat deze code werkt zoals je hem hebt, moet je weten dat het object dat wordt geretourneerd door DeserializeObject een algemeen woordenboek is van string,object. Hier is de code om het op die manier te doen:

var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);

Als u het dynamische zoekwoord wilt gebruiken, kunt u hier lezen hoe.

Als je een klasse of struct declareert, kun je Deserialize aanroepen in plaats van DeserializeObject als volgt:

class MyProgram {
    struct MyObj {
        public string test { get; set; }
    }
    static void Main(string[] args) {
        var json_serializer = new JavaScriptSerializer();
        MyObj routes_list = json_serializer.Deserialize<MyObj>("{ \"test\":\"some data\" }");
        Console.WriteLine(routes_list.test);
        Console.WriteLine("Done...");
        Console.ReadKey(true);
    }
}

Antwoord 4, autoriteit 12%

Dynamisch object gebruiken met JavaScriptSerializer.

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
dynamic item = serializer.Deserialize<object>("{ \"test\":\"some data\" }");
string test= item["test"];
//test Result = "some data"

Antwoord 5, autoriteit 7%

Newtonsoft is sneller dan Javascript serializer. … deze hangt af van het Newtonsoft NuGet-pakket, dat populair en beter is dan de standaard serializer.

oplossing met één regelcode.

var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Jsonstring);
Myclass oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<Myclass>(Jsonstring);

Antwoord 6, autoriteit 5%

Zoals tripletdad99 zei

var result = JsonConvert.DeserializeObject<T>(json);

maar als je geen extra object wilt maken, kun je het in plaats daarvan maken met Dictionary

var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(json_serializer);

Antwoord 7, autoriteit 4%

voeg deze ddl toe aan de verwijzing naar uw project: System.Web.Extensions.dll

gebruik deze naamruimte: gebruik System.Web.Script.Serialization;

public class IdName
{
    public int Id { get; set; }
    public string Name { get; set; }
}
   string jsonStringSingle = "{'Id': 1, 'Name':'Thulasi Ram.S'}".Replace("'", "\"");
   var entity = new JavaScriptSerializer().Deserialize<IdName>(jsonStringSingle);
   string jsonStringCollection = "[{'Id': 2, 'Name':'Thulasi Ram.S'},{'Id': 2, 'Name':'Raja Ram.S'},{'Id': 3, 'Name':'Ram.S'}]".Replace("'", "\"");
   var collection = new JavaScriptSerializer().Deserialize<IEnumerable<IdName>>(jsonStringCollection);

Antwoord 8, autoriteit 3%

Kopieer uw Json en plak in textbox op json2csharpen klik op de knop Genereer.

Er wordt een cs-klasse gegenereerd, gebruik dat cs-bestand zoals hieronder

var generatedcsResponce = JsonConvert.DeserializeObject(yourJson);

Waar RootObjectde naam is van het gegenereerde cs-bestand;


Antwoord 9, autoriteit 3%

Een andere snelle en gemakkelijke manier om deze stappen gedeeltelijk te automatiseren, is door:

  1. neem de JSON die je wilt ontleden en plak deze hier: https://app.quicktype.io/. Wijzig de taal in C# in de vervolgkeuzelijst.
  2. Werk de naam linksboven bij naar je klasnaam, deze staat standaard op “Welkom”.
  3. Ga in visuele studio naar Website -> Beheer pakketten en gebruik NuGet om Json.Net van Newtonsoft toe te voegen.
  4. app.quicktype.io gegenereerde serialisatiemethoden op basis van Newtonsoft.
    Als alternatief kunt u nu code gebruiken zoals:

    WebClient-client = nieuwe WebClient();

    string myJSON = client.DownloadString(“https://URL_FOR_JSON.com/JSON_STUFF“);

    var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject(myJSON);


Antwoord 10

Converteer een JSON-string naar een object in C#. Met behulp van onderstaande testcase .. het werkte voor mij. Hier is “MenuInfo” mijn C#-klasseobject.

JsonTextReader reader = null;
try
{
    WebClient webClient = new WebClient();
    JObject result = JObject.Parse(webClient.DownloadString("YOUR URL"));
    reader = new JsonTextReader(new System.IO.StringReader(result.ToString()));
    reader.SupportMultipleContent = true;
}
catch(Exception)
{}
JsonSerializer serializer = new JsonSerializer();
MenuInfo menuInfo = serializer.Deserialize<MenuInfo>(reader);

Antwoord 11

Eerst moet je een bibliotheek opnemen zoals:

using System.Runtime.Serialization.Json;
DataContractJsonSerializer desc = new DataContractJsonSerializer(typeof(BlogSite));
string json = "{\"Description\":\"Share knowledge\",\"Name\":\"zahid\"}";
using (var ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(json)))
{
    BlogSite b = (BlogSite)desc.ReadObject(ms);
    Console.WriteLine(b.Name);
    Console.WriteLine(b.Description);
}

Antwoord 12

Laten we aannemen dat je een klassenaam Studenthebt, deze heeft de volgende velden en het heeft een methode die JSON als invoer neemt en een string Student Objectretourneert. We kunnen gebruik hier JavaScriptSerializerConverteer JSON-tekenreeks naar C#-object.stdis hier een JSON-tekenreeks.

 public class Student
{
   public string FirstName {get;set:}
   public string LastName {get;set:}
   public int[] Grades {get;set:}
}
public static Student ConvertToStudent(string std)
{
  var serializer = new JavaScriptSerializer();
  Return serializer.Deserialize<Student>(std);
 }

Other episodes