Я работал с JSON годами, но никогда не сталкивался с ситуацией, когда ключевые значения являются динамическими. Я уверен, что есть другие ситуации, но в моем конкретном случае я пытаюсь десериализовать поток LinkedIn. Ниже приведен пример запроса возвращенных данных, выполненного с областью действия, равной r_liteprofile.
Я пытался использовать словарь, но возвращаемое значение всегда равно нулю.
Ниже приведен пример возврата данных из вызова API LinkedIn:
{
"id": "REDACTED",
"firstName": {
"localized": {
"en_US": "Tina"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"lastName": {
"localized": {
"en_US": "Belcher"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"profilePicture": {
"displayImage": "urn:li:digitalmediaAsset:B54328XZFfe2134zTyq"
}
}
Чего я не понимаю, так это как обрабатывать «локализацию» при десериализации данных. Если я ожидаю, что значение ключа будет «en_US», все работает отлично. Но это не то, что всегда будет правдой. По моим исследованиям количество различных значений ограничено, и ниже приведено подмножество доступных ключей.
{
"localized": {
"de_DE": "LinkedIn",
"en_US": "LinkedIn",
"es_ES": "LinkedIn",
"in_ID": "LinkedIn"
}
}
Ниже приведено определение типа:
public class Localized
{
public string en_Us { get; set; }
}
public class PreferredLocale
{
public string country { get; set; }
public string language { get; set; }
}
public class LastName
{
public Localized localized { get; set; }
public PreferredLocale preferredLocale { get; set; }
}
public class FirstName
{
public Localized localized { get; set; }
public PreferredLocale preferredLocale { get; set; }
}
public class ProfilePicture
{
public string displayImage { get; set; }
}
public class LinkedLiteProfile
{
public LastName lastName { get; set; }
public FirstName firstName { get; set; }
public ProfilePicture profilePicture { get; set; }
public string id { get; set; }
}
И код:
var data = System.IO.File.ReadAllText(<<file address>>);
var result = JsonConvert.DeserializeObject<LinkedLiteProfile>(data);