#c# #json #asp.net-web-api #json.net #json-deserialization
#c# #json #asp.net-web-api #json.net #json-десериализация
Вопрос:
Я пытаюсь десериализовать этот json в модель:
{
"settings": [
{
"name": "setting1",
"value": {
"key": "value"
}
},
{
"name": "setting2",
"value": 10
}
]
}
Как вы можете видеть, my value
может быть либо простым значением, таким как int, или string, либо это может быть другой объект json.
Моя цель здесь — десериализовать значение в JToken
или a string
.
Я пытался десериализовать с помощью Json.NET, насколько я знаю, WebAPI использует его под капотом.
Это то, что я пытался:
public class SettingsBatch
{
[JsonProperty(PropertyName = "settings")]
public List<SettingInBatch> Settings { get; set; }
}
public class SettingsInBatch
{
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "value")]
public object Value { get; set; }
}
Из моих тестов (пожалуйста, прочитайте комментарии в строке):
[JsonProperty(PropertyName = "value")]
public string Value { get; set; } // deserialization fails when "value" is a JsonObject
[JsonProperty(PropertyName = "value")]
public JToken Value { get; set; } // deserialization fails always
[JsonProperty(PropertyName = "value")]
public Object Value { get; set; } // deserialization works fine, what's curios
// is that if the value is a json object the Object type is JToken
// (just that I have to cast it). If it's an int or a string
// obviously the type is int / string so I would have to
//construct somehow a JToken.
Как я могу этого добиться?
Комментарии:
1. Вы пытались прочитать содержимое запроса в виде строки, а затем использовать
Request.Content.ReadAsStringAsync
? Затем вы можете выполнить любой ручной синтаксический анализ JSON со строкой полезной нагрузки. Это удобно, когда входящий JSON не всегда имеет одну и ту же «схему».2. Я этого не делал, я уверен, что смогу разобрать его пользовательским способом, мне было интересно, есть ли возможность использовать существующий фреймворк.