Convert JSON String To C# Object

前端 未结 14 1936
感情败类
感情败类 2020-11-22 14:27

Trying to convert a JSON string into an object in C#. Using a really simple test case:

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
obj         


        
相关标签:
14条回答
  • 2020-11-22 14:49

    It looks like you're trying to deserialize to a raw object. You could create a Class that represents the object that you're converting to. This would be most useful in cases where you're dealing with larger objects or JSON Strings.

    For instance:

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

    Then your deserialization code would be:

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

    More information can be found in this tutorial: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx

    0 讨论(0)
  • 2020-11-22 14:49

    Here's a simple class I cobbled together from various posts.... It's been tested for about 15 minutes, but seems to work for my purposes. It uses JavascriptSerializer to do the work, which can be referenced in your app using the info detailed in this post.

    The below code can be run in LinqPad to test it out by:

    • Right clicking on your script tab in LinqPad, and choosing "Query Properties"
    • Referencing the "System.Web.Extensions.dll" in "Additional References"
    • Adding an "Additional Namespace Imports" of "System.Web.Script.Serialization".

    Hope it helps!

    void Main()
    {
      string json = @"
      {
        'glossary': 
        {
          'title': 'example glossary',
            'GlossDiv': 
            {
              'title': 'S',
              'GlossList': 
              {
                'GlossEntry': 
                {
                  'ID': 'SGML',
                  'ItemNumber': 2,          
                  'SortAs': 'SGML',
                  'GlossTerm': 'Standard Generalized Markup Language',
                  'Acronym': 'SGML',
                  'Abbrev': 'ISO 8879:1986',
                  'GlossDef': 
                  {
                    'para': 'A meta-markup language, used to create markup languages such as DocBook.',
                    'GlossSeeAlso': ['GML', 'XML']
                  },
                  'GlossSee': 'markup'
                }
              }
            }
        }
      }
    
      ";
    
      var d = new JsonDeserializer(json);
      d.GetString("glossary.title").Dump();
      d.GetString("glossary.GlossDiv.title").Dump();  
      d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();  
      d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();    
      d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();   
      d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump(); 
      d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();   
    }
    
    
    // Define other methods and classes here
    
    public class JsonDeserializer
    {
      private IDictionary<string, object> jsonData { get; set; }
    
      public JsonDeserializer(string json)
      {
        var json_serializer = new JavaScriptSerializer();
    
        jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
      }
    
      public string GetString(string path)
      {
        return (string) GetObject(path);
      }
    
      public int? GetInt(string path)
      {
        int? result = null;
    
        object o = GetObject(path);
        if (o == null)
        {
          return result;
        }
    
        if (o is string)
        {
          result = Int32.Parse((string)o);
        }
        else
        {
          result = (Int32) o;
        }
    
        return result;
      }
    
      public object GetObject(string path)
      {
        object result = null;
    
        var curr = jsonData;
        var paths = path.Split('.');
        var pathCount = paths.Count();
    
        try
        {
          for (int i = 0; i < pathCount; i++)
          {
            var key = paths[i];
            if (i == (pathCount - 1))
            {
              result = curr[key];
            }
            else
            {
              curr = (IDictionary<string, object>)curr[key];
            }
          }
        }
        catch
        {
          // Probably means an invalid path (ie object doesn't exist)
        }
    
        return result;
      }
    }
    
    0 讨论(0)
  • 2020-11-22 14:50

    Convert a JSON string into an object in C#. Using below test case.. its worked for me. Here "MenuInfo" is my C# class object.

    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);
    
    0 讨论(0)
  • 2020-11-22 14:52

    First you have to include library like:

    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);
    }
    
    0 讨论(0)
  • 2020-11-22 14:54

    Let's assume you have a class name Student it has following fields and it has a method which will take JSON as a input and return a string Student Object.We can use JavaScriptSerializer here Convert JSON String To C# Object.std is a JSON string here.

      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);
     }
    
    0 讨论(0)
  • 2020-11-22 14:59

    Newtonsoft is faster than java script serializer. ... this one depends on the Newtonsoft NuGet package, which is popular and better than the default serializer.

    one line code solution.

    var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Jsonstring);
    
    Myclass oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<Myclass>(Jsonstring);
    
    0 讨论(0)
提交回复
热议问题