Как проверить отсутствие поля в JSON с помощью JSON.NET - PullRequest
0 голосов
/ 28 октября 2018

У меня есть этот JSON:

{
    "Foo": "A value",
    "Bar": 42
}

Чтобы десериализовать его, у меня есть этот класс:

public class SomeClass
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

Я десериализую его, используя:

string json1 = "{\"Foo\":\"A value\",\"Bar\":42}";
var MyObj1 = JsonConvert.DeserializeObject<SomeClass>(json1);
Debug.WriteLine("Foo1 : " + MyObj1.Foo); //Foo1 : A value
Debug.WriteLine("Bar1 : " + MyObj1.Bar); //Bar1 : 42

Мне нужна особая обработка, когда в JSON отсутствует поле.

Например:

{
    "Foo": "Another value"
}

При использовании того же кода, что и выше, Bar устанавливается в 0. Это можетв исходном JSON было установлено значение 0, поэтому я не могу определить с помощью этого значения, существовало оно или нет.

string json2 = "{\"Foo\":\"Another value\"}";
var MyObj2 = JsonConvert.DeserializeObject<SomeClass>(json2);
Debug.WriteLine("Foo2 : " + MyObj2.Foo); //Foo2 : Another value
Debug.WriteLine("Bar2 : " + MyObj2.Bar); //Bar2 : 0

Как мне его достичь?

1 Ответ

0 голосов
/ 28 октября 2018

Простейшим вариантом будет присвоить ему свойство int?, а затем проверить, является ли значение нулевым:

public class SomeClass
{
    public string Foo { get; set; }
    public int? Bar { get; set; }
}

...

var deserialized = JsonConvert.DeserializeObject<SomeClass>(json);
if (deserialized.Bar == null)
{
    // Whatever you want to do if it wasn't set
}

Конечно, JSON может явно установитьзначение до нуля, но я ожидаю, что вы, вероятно, были бы рады обработать это, как если бы оно отсутствовало.

...