Sid
Sid

Reputation: 178

Error while pasing JSON

While I am trying to call the

  `var obj = JsonConvert.DeserializeObject<UserModel>({myjsonString})`

it keeps throwing me unable to deserialize exception. To check if my json string was well formed i decided to Parse the string and called

JsonSchema schema = JsonSchema.Parse({myjsonString});

now i get the error below, not quite sure what it means

Additional information: Expected object while parsing schema object, got String. Path ''

**UPDATE**

"{\"Id\":5,\"Username\":\"Sid\",\"FirstName\":\"Sid \",\"LastName\":\"LastSid\",\"Email\":\"[email protected]\",\"Password\":\"sample\",\"GravatarHash\":\"http://www.gravatar.com/avatar/f4f901415af5aff35801e8444cd5adc1?d=retro&?s=50\",\"Country\":\"Moon\",\"OrganizationId\":1,\"IsLocked\":false,\"CreatedDate\":\"12/13/2013 2:34:28 AM\",\"UpdatedDate\":\"12/13/2013 2:34:28 AM\",\"DataLoaded\":true}"   

UPDATE 2

"\"{\\\"Id\\\":5,\\\"Username\\\":\\\"Sid\\\",\\\"FirstName\\\":\\\"Siddharth \\\",\\\"LastName\\\":\\\"Kosta\\\",\\\"Email\\\":\\\"[email protected]\\\",\\\"Password\\\":\\\"PAssword\\\",\\\"GravatarHash\\\":\\\"http://www.gravatar.com/avatar/f4f901415af5aff35801e8c4bcd5adc1?d=retro&?s=50\\\",\\\"Country\\\":\\\"India\\\",\\\"OrganizationId\\\":1,\\\"IsLocked\\\":false,\\\"CreatedDate\\\":\\\"2013-12-13T02:34:28.037\\\",\\\"UpdatedDate\\\":\\\"2013-12-13T02:34:28.23\\\",\\\"DataLoaded\\\":true}\""

The User Model

  public class UserModel
    {
        public Int32 Id { get; set; }
        public String Username { get; set; }
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String Email { get; set; }
        public String Password { get; set; }
        public String GravatarHash { get; set; }
        public String Country { get; set; }
        public Int32 OrganizationId { get; set; }
        public Boolean IsLocked { get; set; }
        public DateTime CreatedDate { get; set; }
        public DateTime UpdatedDate { get; set; }
    } 

I also tried

public String CreatedDate { get; set; }
public String UpdatedDate { get; set; }

thinking if the dates were causing a problem

Upvotes: 0

Views: 861

Answers (4)

Brian Rogers
Brian Rogers

Reputation: 129657

It looks to me like your JSON is getting double serialized. (Having a bunch of extra backslashes in your JSON is a symptom of this.) I notice in the comments on another answer that you said you are using Web API. The Web API framework takes care of serialization for you, so you do not need to call JsonConvert.SerializeObject() in those methods. Instead just return your result directly. Then you should be able to deserialize it normally in your client. See this question.

Upvotes: 1

Aydin
Aydin

Reputation: 15284

You're missing the DataLoaded property.

public bool DataLoaded { get; set; }

In future, use this website to generate your C# classes from JSON.

http://json2csharp.com/


EDIT:

Try this step by step... Copy and paste this class exactly as is.

public class UserModel
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string GravatarHash { get; set; }
    public string Country { get; set; }
    public int OrganizationId { get; set; }
    public bool IsLocked { get; set; }
    public string CreatedDate { get; set; }
    public string UpdatedDate { get; set; }
    public bool DataLoaded { get; set; }
}

Now in the console have this:

    var jsonString = @"{""Id"":5,""Username"":""Sid"",""FirstName"":""Sid "",""LastName"":""LastSid"",""Email"":""[email protected]"",""Password"":""sample"",""GravatarHash"":""http://www.gravatar.com/avatar/f4f901415af5aff35801e8444cd5adc1?d=retro&?s=50"",""Country"":""Moon"",""OrganizationId"":1,""IsLocked"":false,""CreatedDate"":""12/13/2013 2:34:28 AM"",""UpdatedDate"":""12/13/2013 2:34:28 AM"",""DataLoaded"":true}";
    var user = JsonConvert.DeserializeObject<UserModel>(jsonString);
    Console.WriteLine(user.Country);

    Console.ReadLine();

Upvotes: 0

Daniel Kotin
Daniel Kotin

Reputation: 326

Is there a reason why you have the curly braces in

var obj = JsonConvert.DeserializeObject<UserModel>({myjsonString})

That seems like the source of the error. Change it to:

var obj = JsonConvert.DeserializeObject<UserModel>(myjsonString)

Upvotes: 0

Jevgenij Nekrasov
Jevgenij Nekrasov

Reputation: 2760

Update:

It works perfectly fine with your UserModel, at least for me.

Assume you have such UserModel:

public class UserModel
{
    public int Id { get; set; }

    public string Username { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Email { get; set; }

    public string Password { get; set; }

    public string GravatarHash { get; set; }

    public string Country { get; set; }

    public int OrganizationId { get; set; }

    public bool IsLocked { get; set; }

    public DateTime CreatedDate { get; set; }

    public DateTime UpdatedDate { get; set; }

    public bool DataLoaded { get; set; }
}

var input =
    "{\"Id\":5,\"Username\":\"Sid\",\"FirstName\":\"Sid \",\"LastName\":\"LastSid\",\"Email\":\"[email protected]\",\"Password\":\"sample\",\"GravatarHash\":\"http://www.gravatar.com/avatar/f4f901415af5aff35801e8444cd5adc1?d=retro&?s=50\",\"Country\":\"Moon\",\"OrganizationId\":1,\"IsLocked\":false,\"CreatedDate\":\"12/13/2013 2:34:28 AM\",\"UpdatedDate\":\"12/13/2013 2:34:28 AM\",\"DataLoaded\":true}";

var userModel = JsonConvert.DeserializeObject<UserModel>(input);

I think the problem with your model, can you please provided it?

Upvotes: 2

Related Questions