2015-12-20 2 views
4

Я пытаюсь понять, почему я получаю нулевые значения для следующего:C# JsonConvertDeserialization возвращения нулевых значений

Json:

{ 
    "IdentityService": { 
    "IdentityTtlInSeconds": "90", 
    "LookupDelayInMillis": "3000" 
    } 
} 

Класс:

public class IdentityService 
{ 
    public string IdentityTtlInSeconds { get; set; } 

    public string LookupDelayInMillis { get; set; } 
} 

Вызывается с:

_identityService = JsonConvert.DeserializeObject<IdentityService>(itemAsString); 

Класс создается, но значения для IdentityTtlInSeconds и LookupDelayInMillis равны нулю. Я не могу понять, почему они должны быть

+0

десериализации к динамическому, а не вашему классу. посмотрите, что он deserializes и убедитесь, что ваш класс такой. –

ответ

6

Вам нужно еще один класс - объект, который имеет одно свойство под названием IdentityService:

public class RootObject 
{ 
    public IdentityService IdentityService { get; set; } 
} 

Вам нужен этот класс, потому что JSON, что у вас есть еще одно свойство называется IdentityService, и это объект имеет два свойства: IdentityTtlInSeconds и LookupDelayInMillis. Если вы используете сериализатор по умолчанию, ваши классы должны отражать структуру, которая у вас есть в вашей строке JSON.

И теперь вы можете использовать его для десериализации вашей строки:

var rootObject = JsonConvert.DeserializeObject<RootObject>(itemAsString); 
_identityService = rootObject.IdentityService; 
+0

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

+0

Спасибо, что сработал, теперь я понимаю. – Phil

Смежные вопросы