108

I have a string and I want to get some values from it.

My strings seem like:

string1:

"{\r\n   \"id\": \"100000280905615\",
 \r\n \"name\": \"Jerard Jones\",
 \r\n   \"first_name\": \"Jerard\",
 \r\n   \"last_name\": \"Jones\",
 \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\",
 \r\n   \"username\": \"Jerard.Jones\",
 \r\n   \"gender\": \"female\",
 \r\n   \"locale\": \"en_US\"\r\n}"

string2:

"{\r\n   \"id\": \"100000390001929\",
  \r\n   \"name\": \"\\u05d1\\u05d2\\u05e8\\u15dc\\u25d9 \\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"first_name\": \"\\u05d4\\u05d2\\u05e7\\u02dc\\u05d9\",
  \r\n   \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"link\": "https://www.facebook.com/people/\\u05d2\\u05d1\\u05e@\\u05dc\\u05d9-\\u05d1\\u05e8\\u05d4\\u05e9/100000390001929\",
  \r\n   \"gender\": \"female\",
  \r\n   \"locale\": \"he_IL\"\r\n}"

Unfortunately, there is a situation that a string will be by the same concept, but without some parameters:

string3:

"{\r\n   \"id\": \"100000390001929\",
  \r\n   \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"gender\": \"female\",
  \r\n   \"locale\": \"he_IL\"\r\n}"

How can I get the values of: id, first_name, last_name, gender, locale?

7

7 Answers 7

182

Your strings are JSON formatted, so you will need to parse it into a object. For that you can use JSON.NET.

Here is an example on how to parse a JSON string into a dynamic object:

string source = "{\r\n   \"id\": \"100000280905615\", \r\n \"name\": \"Jerard Jones\",  \r\n   \"first_name\": \"Jerard\", \r\n   \"last_name\": \"Jones\", \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\", \r\n   \"username\": \"Jerard.Jones\", \r\n   \"gender\": \"female\", \r\n   \"locale\": \"en_US\"\r\n}";
dynamic data = JObject.Parse(source);
Console.WriteLine(data.id);
Console.WriteLine(data.first_name);
Console.WriteLine(data.last_name);
Console.WriteLine(data.gender);
Console.WriteLine(data.locale);
Sign up to request clarification or add additional context in comments.

7 Comments

thank you.. I used: dynamic data = JsonConvert.DeserializeObject(elements[0].Text);
This is all good but until you have a dynamic string you need to get from the json. eg Users.{ID}.Username
EDIT: found a way using this method:- String username = data["Users"]["" + User]["Username"];
Love the dynamic usage here! +1
If I try to return a property(for example result) from the dynamic objetc, returns null :s
|
31

Following code is working for me.

Usings:

using System.IO;
using System.Net;
using Newtonsoft.Json.Linq;

Code:

 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            string json = responseReader.ReadToEnd();
                            string data = JObject.Parse(json)["id"].ToString();
                        }
                    }
                }

//json = {"kind": "ALL", "id": "1221455", "longUrl": "NewURL"}

Comments

29

A .NET 6 version using System.Text.Json

using System;
                    
public class Program
{
    public static void Main()
    {
        var jsonString = @"{ ""id"" : 123 }";
        
        //parse it
        var yourObject = System.Text.Json.JsonDocument.Parse(jsonString);
        //retrieve the value
        var id= yourObject.RootElement
                          .GetProperty("id");
        
        Console.WriteLine(id);
    }
}

To retrieve nested properties, you can chain the GetProperty calls. As a more advanced example:

//access first element of array "persons" get nested property "age" 
var age = yourObject.rootElement.GetProperty("persons")[0]
                                .GetProperty("age");

Comments

24

my string

var obj = {"Status":0,"Data":{"guid":"","invitationGuid":"","entityGuid":"387E22AD69-4910-430C-AC16-8044EE4A6B24443545DD"},"Extension":null}

Following code to get guid:

var userObj = JObject.Parse(obj);
var userGuid = Convert.ToString(userObj["Data"]["guid"]);

1 Comment

I think your string is not a string ;-)
10

Create a class like this:

public class Data
{
    public string Id {get; set;}
    public string Name {get; set;}
    public string First_Name {get; set;}
    public string Last_Name {get; set;}
    public string Username {get; set;}
    public string Gender {get; set;}
    public string Locale {get; set;}
}

(I'm not 100% sure, but if that doesn't work you'll need use [DataContract] and [DataMember] for DataContractJsonSerializer.)

Then create JSonSerializer:

private static readonly XmlObjectSerializer Serializer = new DataContractJsonSerializer(typeof(Data));

and deserialize object:

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(contents);
using(var stream = new MemoryStream(byteArray))
{
    (Data)Serializer.ReadObject(stream);
}

3 Comments

Json.NET is far better than DataContractJsonSerializer. See the feature comparison table: json.codeplex.com
And ServiceStack.Text is far better than JSON.Net.
I like Json.NET but this is a good answer that doesn't introduce a lot of external code and it easy to understand.
3

You can also use this alternative specifying the expected type:

using Newtonsoft.Json;

class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}

string jsonString = "{\"name\": \"John\", \"age\": 30}";

Person person = JsonConvert.DeserializeObject<Person>(jsonString);

1 Comment

once we get into the world of arrays and linq processing, concrete types are just easier to get our head around, thanks.
3

This code is working for us:

string json = "{\"subjectId\":\"d7aa0fdf-df51-4ef7-ad0b-9ace314b5ppb\"}";
dynamic data = JObject.Parse(json);
string userId = data["subjectId"];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.