Timothy Harvey
Timothy Harvey

Reputation: 53

How do I extract a single element from a JSON http response and pass it to C# as an integer?

I'm writing a WCF service and trying to extract the value for SMS from the following JSON string which forms an http response. The rest of the response is superfluous for my requirements.

{"balance":{"sms":100,"mms":2},"status":"success"}

The code i've got at the moment only ever returns '0' as the integer for balance.

    public class balanceObject
    {
        public int sms { get; set;}
        public int mms {get; set;}
        public string status {get; set;}
    }

    public int balanceRequest()
    {
        using (var wb = new WebClient())
            {
                byte[] response = wb.UploadValues("http://api.txtlocal.com/balance/?apiKey=", new NameValueCollection()
            {
            {"apiKey" , api},
            });

            string result = System.Text.Encoding.UTF8.GetString(response);
            JavaScriptSerializer js = new JavaScriptSerializer();
            balanceObject request = (balanceObject)js.Deserialize(result, typeof(balanceObject));
            int balance = request.sms;
            return balance;   

            }
        } 

Any advice would be gratefully received.

Upvotes: 0

Views: 377

Answers (1)

Chris Stillwell
Chris Stillwell

Reputation: 10547

Your balanceObject doesn't match your JSON. Your object should look more like this:

public class phoneObject
{
    public string status {get; set;}
    public balanceObject balance {get; set;}
}

public class balanceObject
{
    public int sms { get; set;}
    public int mms {get; set;}
}

You would then retrieve your value like so:

phoneObject request = (phoneObject)js.Deserialize(result, typeof(phoneObject));
int balance = request.balance.sms;
return balance; 

Upvotes: 2

Related Questions