1

I am parsing a Json document using Json.NET and creating an ArrayList using a Collection Initializer as follows

var array = new ArrayList
            {
                  inputJson["abc"].ToString(),
                  inputJson["def"].Value<float>(),
                  inputJson["ghi"].Value<float>()
            };

Now I would like to add a null check so it doesn't throw an exception if one of the properties is missing in the Json document.

Thanks

4

3 回答 3

3

像这样的东西可以解决问题

var array = new ArrayList
{
      inputJson["abc"] != null ? inputJson["abc"].ToString() : "",
      inputJson["def"] != null ? inputJson["def"].Value<float>() : 0.0F,
      inputJson["ghi"] != null ? inputJson["ghi"].Value<float>() : 0.0F
};
于 2013-08-12T12:06:29.307 回答
2

我会创建扩展方法来处理这个问题。请注意,我对这里的类型并不积极,所以请耐心等待:

public static string AsString(this JObjectValue jsonValue, string defaultValue = "")
{
    if (jsonValue != null)
        return jsonValue.ToString();
    else
        return defaultValue;
}

public static T As<T>(this JObjectValue jsonValue, T defaultValue = default(T))
{
    if (jsonValue != null)
        return jsonValue.Value<T>();
    else
        return defaultValue;
}

随着用法:

var array = new ArrayList
{
    inputJson["abc"].AsString(),
    inputJson["def"].As<float>(),
    inputJson["ghi"].As<float>(),
    inputJson["jkl"].As(2.0f) //or with custom default values and type inference
};

这还具有避免两次点击索引器的好处(一次检查null,第二次转换值),并避免重复自己如何解析/读取 json 输入。

于 2013-08-12T12:15:07.687 回答
1

你可以试试这个:

var array = new ArrayList
{
      inputJson["abc"] ?? inputJson["abc"].ToString(),
      ...
};
于 2013-08-12T12:08:35.710 回答