Как десериализовать JSON, когда он некоторое время возвращает массив, а некоторое время возвращает модель - PullRequest
0 голосов
/ 18 апреля 2019

В настоящее время мы используем внешний API, который возвращает объект json при наличии данных и пустой массив json при сбое. Я ищу лучший способ десериализации модели JSON, которая является более надежной, чем проверка строки.

В настоящее время мы читаем json как строку, чтобы увидеть, содержит ли он пустой массив и не десериализован ли он в модель.

Пустой массив

"data_field":[]

Объект данных

"data_field":{
"part_one":1,
"part_two":2,
}

1 Ответ

0 голосов
/ 18 апреля 2019

Используйте класс как this :

using System;
using Newtonsoft.Json.Linq;

public class Program
{
    public static void Main()
    {
        Test(JToken.Parse("{}")); // empty object
        Test(JToken.Parse("[]")); // empty array
        Test(JToken.Parse("\"\"")); // empty string
        Test(JToken.Parse("null")); // null value
    }

    private static void Test(JToken token)
    {
        Console.WriteLine("Type: " + token.Type.ToString());
        Console.WriteLine("Token: " + token.ToString());
        Console.WriteLine("IsEmpty1: " + token.IsNullOrEmpty().ToString());
        Console.WriteLine("IsEmpty2: " + token.IsNullOrEmpty2().ToString());
        Console.WriteLine();
    }
}

public static class JsonHelper
{
    public static bool IsNullOrEmpty(this JToken token)
    {
        return (token == null) ||
               (token.Type == JTokenType.Array && !token.HasValues) ||
               (token.Type == JTokenType.Object && !token.HasValues) ||
               (token.Type == JTokenType.String && token.ToString() == String.Empty) ||
               (token.Type == JTokenType.Null);
    }

    public static bool IsNullOrEmpty2(this JToken token)
    {
        return token == null || string.IsNullOrWhiteSpace(token.ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...