0

我有一个这样的json响应:

{"response_values":[110,{"id":14753,"name":"piter"},{"id":14753,"name":"rabbit"}]}

我有一个简单的课程

public class Class1
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

当我尝试使用此方法将 json 转换为对象列表时:

public T Cast<T>(string json)
{
    var result = default(T);

    var jsonObject = JObject.Parse(json);
    if (jsonObject != null)
    {
        var responseToken = jsonObject["response"];
        result = responseToken.ToObject<T>();
    }

    return result;
}

像这样

...

var jsonString = GetJson();
var items = Cast<List<Class1>>();

...

我有一个例外,因为值“110”是整数。我怎样才能跳过这个值?

4

1 回答 1

1

如果您希望忽略的值始终位于开头,则始终可以使用此选项:

if (jsonObject != null)
{
    var responseToken = parsed["response_values"].SkipWhile(j => j.Type != JTokenType.Object);
    if (responseToken.Count() > 0) result = responseToken.ToObject<T>();
}

如果它始终是第一个值,您可能更喜欢使用Skip(1)它。SkipWhile或者,您可以使用Where忽略或选择消息中任何位置的标记。

当然,您可以根据您期望在成功场景中返回的确切内容来使用这种方法(改变事物)。

于 2012-06-26T21:03:16.727 回答