Здравствуйте, amironov79, Вы писали:
S>>"pairs": [ — скобка есть открывающая, а вот где закрывающая?
A>Так надо добавить закрывающую скобку, а не менять иерархию элементов.
Так вопрос в том как программно добавить [? Или же это опечатка автора и скобку программно добавлять не нужно?
Допустим это опечатка автора и автор не осилил задать правильный вопрос. Тогда JSON будет таким:
{
"0": {
"name": "Binance",
"date_live": null,
"url": "https://www.binance.com"
},
"1": {
"name": "Gate",
"date_live": null,
"url": "https://gate.io/"
},
"pairs": [
{
"volume": 9434765.1817967,
"price": 0.0587
},
{
"volume": 9401647.3731512,
"price": 2.0366
}
]
}
Так?
Тогда GPT дает ответ:
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace JsonParsingDemo
{
// ---------- POCO classes ----------
public sealed class Exchange
{
[JsonPropertyName("name")]
public string name { get; init; }
[JsonPropertyName("date_live")]
public DateTime? dateLive { get; init; }
[JsonPropertyName("url")]
public string url { get; init; }
}
public sealed class Pair
{
[JsonPropertyName("volume")]
public double volume { get; init; }
[JsonPropertyName("price")]
public double price { get; init; }
}
/// <summary>
/// Root object: numeric keys go to otherProps; "pairs" → List<Pair>
/// </summary>
public sealed class Root
{
[JsonExtensionData]
public Dictionary<string, JsonElement> otherProps { get; init; }
[JsonPropertyName("pairs")]
public List<Pair> pairs { get; init; }
/// <summary>
/// Convert numeric‑key properties into Exchange list.
/// </summary>
public IReadOnlyList<Exchange> GetExchanges()
{
var list = new List<Exchange>();
foreach (var kvp in otherProps)
{
if (!int.TryParse(kvp.Key, out _))
continue;
list.Add(kvp.Value.Deserialize<Exchange>());
}
return list;
}
}
// ---------- Demo ----------
internal static class Program
{
private static void Main()
{
// JSON literal.
string json = """
{
"0": {
"name": "Binance",
"date_live": null,
"url": "https://www.binance.com"
},
"1": {
"name": "Gate",
"date_live": null,
"url": "https://gate.io/"
},
"pairs": [
{
"volume": 9434765.1817967,
"price": 0.0587
},
{
"volume": 9401647.3731512,
"price": 2.0366
}
]
}
""";
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
Root root = JsonSerializer.Deserialize<Root>(json, options);
IReadOnlyList<Exchange> exchanges = root.GetExchanges();
List<Pair> pairs = root.pairs;
Console.WriteLine("Exchanges:");
foreach (var ex in exchanges)
{
Console.WriteLine($" {ex.name} → {ex.url}");
}
Console.WriteLine("\nPairs:");
foreach (var p in pairs)
{
Console.WriteLine($" volume: {p.volume}, price: {p.price}");
}
}
}
}
Здравствуйте, Shmj, Вы писали:
S>Тогда GPT дает ответ:
Так похоже на правду

Интересно, имя Exchange ты в промте задавал или оно по литералу "Binance" выведено было?
Здравствуйте, amironov79, Вы писали:
S>>Тогда GPT дает ответ:
A>Так похоже на правду
Интересно, имя Exchange ты в промте задавал или оно по литералу "Binance" выведено было?
Полный текст запроса в бесплатной версии:
C# — нужно распарсить такой JSON в объекты
{
"0": {
"name": "Binance",
"date_live": null,
"url": "https://www.binance.com"
},
"1": {
"name": "Gate",
"date_live": null,
"url": "https://gate.io/"
},
"pairs": [
{
"volume": 9434765.1817967,
"price": 0.0587
},
{
"volume": 9401647.3731512,
"price": 2.0366
}
]
}
и потом
дай полный код с парсингом из строки
По сути тут только знание документации нужно. А для более сложных вопросов — уже нужна o3
Здравствуйте, Passerby, Вы писали:
P>Спасибо, то что надо. Чем здесь IReadOnlyList<Exchange> лучше List<Exchange>?
Емнип, это чисто Framework design guidelines:
https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/guidelines-for-collections
❌ DO NOT use ArrayList or List<T> in public APIs.
Т.е. технически ничем не отличается, но по правилам хорошего тона — так принято.