c#解析json值,检查是否为null

时间:2015-06-08 10:10:56

标签: c# json

所以我有这个调用服务的Web API,然后返回一个json字符串。 字符串看起来有点像这样:

{
    "title": "Test",
    "slug": "test",
    "collection":{  },
    "catalog_only":{  },
    "configurator":null
}

我已经大大降低了这一点,以便更容易看到我的问题。

当我进行API调用时,我会使用Factory方法对响应进行分解,看起来像这样:

    /// <summary>
    /// Used to create a product response from a JToken
    /// </summary>
    /// <param name="model">The JToken representing the product</param>
    /// <returns>A ProductResponseViewModel</returns>
    public ProductResponseViewModel Create(JToken model)
    {

        // Create our response
        var response = new ProductResponseViewModel()
        {
            Title = model["title"].ToString(),
            Slug = model["slug"].ToString()
        };

        // Get our configurator property
        var configurator = model["configurator"];

        // If the configurator is null
        if (configurator == null)
            throw new ArgumentNullException("Configurator");

        // For each item in our configurator data
        foreach (var item in (JObject)configurator["data"])
        {

            // Get our current option
            var option = item.Value["option"].ToString().ToLower();

            // Assign our configuration values
            if (!response.IsConfigurable) response.IsConfigurable = (option == "configurable");
            if (!response.IsDesignable) response.IsDesignable = (option == "designable");
            if (!response.HasGraphics) response.HasGraphics = (option == "graphics");
            if (!response.HasOptions) response.HasOptions = (option == "options");
            if (!response.HasFonts) response.HasFonts = (option == "fonts");
        }

        // Return our Product response
        return response;
    }
}

现在,正如您所看到的,我正在获取我的配置器属性,然后检查它以查看它是否为空。 json字符串将配置程序显示为 null ,但是当我在检查上放置断点时,它实际上将其值显示为 {} 。 我的问题是如何让它显示值(null)而不是此括号响应?

3 个答案:

答案 0 :(得分:8)

您要求与JToken密钥相关联的configurator这样的令牌 - 它是一个空令牌。

您可以通过以下方式查看:

if (configurator.Type == JTokenType.Null)

因此,如果您想要 ,那么根本没有指定明确的null令牌 configurator,您可以使用方法:

if (configurator == null || configurator.Type == JTokenType.Null)

答案 1 :(得分:0)

    public class Collection
    {
    }

    public class CatalogOnly
    {
    }

    public class RootObject
    {
        public string title { get; set; }
        public string slug { get; set; }
        public Collection collection { get; set; }
        public CatalogOnly catalog_only { get; set; }
        public object configurator { get; set; }
    }

    var k = JsonConvert.SerializeObject(new RootObject
                {
                    catalog_only =new CatalogOnly(),
                    collection = new Collection(),
                    configurator =null,
                    slug="Test",
                    title="Test"
                });

    var t = JsonConvert.DeserializeObject<RootObject>(k).configurator;

此处configurator为空。

答案 2 :(得分:0)

对于那些在较新的 .Net 版本(例如 .Net 5)中使用 System.Text.Json 的人:

var jsonDocument = JsonDocument.Parse("{ \"configurator\": null }");
var jsonElement = jsonDocument.RootElement.GetProperty("configurator");

if (jsonElement.ValueKind == JsonValueKind.Null)
{
    Console.WriteLine("Property is null.");
}