سؤال

I am having an issue I have been researching and can not seem to figure out. I am trying to deserialize Json return from a restsharp call to an api. It worked great on my first one where there was not an array involved. Now that I am trying to do it on a string with an array in it I am having issues. If anybody could help me figure this out it would be greatly appreciated, thank you in advance.

So I am trying to get Roles to be stored to my Model, but it fails because it is an array:

Here is my method:

var request = new RestRequest("api/user/{id}", Method.GET);
request.AddUrlSegment("id", id);
var response = client.Execute(request) as RestResponse;
var d = JsonConvert.DeserializeObject<List<MyModel>>(response.Content);

The error I am getting is on the above line at var d = .... It says:

Cannot implicitly convert type
'System.Collections.Generic.List<Models.MyModel>' to 'Models.MyModel'

The response for var response is (trying to get Roles stored in d to store in model):

"{\"Id\":22,\"FirstName\":\"Shawn\",\"LastName\":\"John\",\"Roles\":[\"User\"]}"

My MyModel looks like so:

public class MyModel
{
    public string Id { get; set; }
    public string Roles { get; set; }
}

Updated code

Getting this error now on the same line:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type
'System.Collections.Generic.List`1[Models.MyModel]' because the type
requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or
change the deserialized type so that it is a normal .NET type (e.g. not
a primitive type like integer, not a collection type like an array or
List<T>) that can be deserialized from a JSON object.
JsonObjectAttribute can also be added to the type to force it to
deserialize from a JSON object.

Changed model to be :

public List<MyModel> Roles { get; set; }

and controller variable to :

List<MyModel> deSerialize2 = 
    JsonConvert.DeserializeObject<List<MyModel>>(response.Content);
هل كانت مفيدة؟

المحلول

try changing your model to

public class MyModel
{
    public int Id { get; set; }
    public List<string> Roles { get; set; }
}

Roles is an array of strings.

Edit: After further inspection, id is actually an integer not a string.

Also, change your deserialize call to this

var d = JsonConvert.DeserializeObject<MyModel>(response.Content);

The json response isn't an array.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top