Моя модель:
public class RootObject
{
public double Balance { get; set; }
public string CardCode { get; set; }
public string CardName { get; set; }
public string PriceLevel { get; set; }
public bool Status { get; set; }
}
Мой ответ Json:
var response = "{\"C0001\":{\"Balance\":3.01,\"CardCode\":\"C0001\",\"CardName\":\"Mubarik\",\"PriceLevel\":\"PL1\",\"Status\":true}}"
Как я могу десериализовать этот ответ на следующую модель.





Вы можете добиться этого, используя Newtonsoft.Json.Linq.JObject, например следующий код.
var response = "{\"C0001\":{\"Balance\":3.01,\"CardCode\":\"C0001\",\"CardName\":\"Mubarik\",\"PriceLevel\":\"PL1\",\"Status\":true}}";
JObject search = JObject.Parse(response);
RootObject yourObject = search["C0001"].ToObject<RootObject>();
Вывод
Чтобы узнать больше о частичной десериализации фрагментов JSON, вы можете проверить здесь
Обновлено:
what about this response? var bp = "{\"C0001\":{\"Balance\":3.01,\"CardCode\":\"C0001\",\"CardName\":\"Mubarik\",\"PriceLevel\":\"PL1\",\"Status\":true},\"C0002\":{\"Balance\":1.03,\"CardCode\":\"C0001\",\"CardName\":\"Richie Rich\",\"PriceLevel\":\"PL2\",\"Status\":true}}" – Mubah Mohamed
В соответствии с форматом в комментарии, где вы получаете несколько объектов в JSON с разными идентификаторами, вы можете попробовать, как показано ниже, преобразовать его в список RootObject.
var response = "{\"C0001\":{\"Balance\":3.01,\"CardCode\":\"C0001\",\"CardName\":\"Mubarik\",\"PriceLevel\":\"PL1\",\"Status\":true},\"C0002\":{\"Balance\":1.03,\"CardCode\":\"C0001\",\"CardName\":\"Richie Rich\",\"PriceLevel\":\"PL2\",\"Status\":true}}";
JObject search = JObject.Parse(response);
IList<JToken> results = search.Children().ToList();
List<RootObject> searchResults = new List<RootObject>();
foreach (JToken result in results)
{
RootObject searchResult = result.First.ToObject<RootObject>();
searchResults.Add(searchResult);
}
Имхо RootObject yourObject = search["C0001"].ToObject<RootObject>(); выглядит лучше. P.S. я не минусовщик
спасибо @woldemar, вы правы, я обновил ответ.
как насчет этого ответа? var bp = "{\"C0001\":{\"Balance\":3.01,\"CardCode\":\"C0001\",\"CardName\":\"Mubarik\",\"PriceLevel\":\"PL1\",\"Status\":true},\"C0002\":{\"Balance\":1.03,\"CardCode\":\"C0001\",\"CardName\":\"Richie Rich\",\"PriceLevel\":\"PL2\",\"Status\":true}}"
В этом случае, что вы хотите? Вы хотите получить его в виде списка?
@MubahMohamed Я обновил ответ, пожалуйста, проверьте и дайте мне знать, решил ли он вашу проблему или нет.
до сих пор не работает
проверьте эту онлайн-демонстрацию rextester.com/WWXJ24677 и дайте мне знать, в чем проблема?
Я использую С# в Xamarin
Какую ошибку вы получаете? Я не могу угадать проблему. Вам нужно предоставить более подробную информацию о том, что не работает и какую ошибку вы получаете
я не могу вернуть десериализованные объекты Json public async Task<List<Partner>> pullPartner() { string Url = "https://bloodbank-3fcd8.firebaseio.com/Partner.json"; HttpClient client = new HttpClient(); HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, Url); HttpResponseMessage responseMessage = await client.SendAsync(requestMessage); var bp = await responseMessage.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<List<Partner>>(bp); } Partner is RootObject
Это не работает.
Его неработоспособность не поможет, вы должны сообщить, какую ошибку/исключение вы получаете. Откуда я знаю, в чем проблема.
могу я связаться с вами через твиттер
Код выше работает
Одно из возможных решений:
var result = JsonConvert.DeserializeObject<Dictionary<string, RootObject>>(response);
На stackoverflow.com/a/54385322/7775908 стоит обратить внимание, потому что он также работает, как и ожидалось.
Хороший способ использовать JSON в C# — это JSON.NET.