Я пытаюсь десериализовать ответ SteamAPI в C# .NET 7. Я делаю запрос REST через RestSharp и сохраняю содержимое в виде файла.
Позже я загружаю файл и хотите десериализовать его для поиска с помощью LINQ. Но с различными опциями JsonSerializerOptions это не работает. SteamAppList.AppList всегда имеет значение null.
Для модели данных я использовал Json2Csharp и Jetbrains Rider.
Я пробовал разные JsonSerializerOptions< /code> и выполнил отладку с помощью VS Code и Jetbrains Rider.
Вот моя модель (SteamAppList.cs):
[Serializable]
public class SteamAppList
{
[JsonPropertyName("applist")]
public Applist Applist;
}
[Serializable]
public class Applist
{
[JsonPropertyName("apps")]
public List Apps;
}
[Serializable]
public class App
{
[JsonPropertyName("appid")]
public int Appid;
[JsonPropertyName("name")]
public string Name;
}
И мой SteamApps.cs для запроса и десериализации:
public class SteamApps
{
private readonly CancellationToken cancellationToken;
private async Task GetSteamApps()
{
var client = new RestClient();
var request = new RestRequest("https://api.steampowered.com/ISteamApps/GetAppList/v2/");
request.AddHeader("Accept", "*/*");
request.AddHeader("User-Agent", "Major GSM");
var response = await client.GetAsync(request, cancellationToken);
return response;
}
public bool RetireveAndSaveSteamApps()
{
var path = FileModule.GetDirectoryPath(MajorGsmLibrary.ApplicationDirectory.Games);
var fileName = "steam.library.json";
RestResponse restResponse = GetSteamApps().Result;
try
{
File.WriteAllText(Path.Combine(path, fileName), restResponse.Content);
}
catch (IOException exception)
{
LogModule.WriteError("Could not write steam library file!", exception);
return false;
}
catch (ArgumentNullException exception)
{
LogModule.WriteError("Missing data for steam library file", exception);
return false;
}
return true;
}
public static string CheckGameAgainstSteamLibraryWithAppId(string appId)
{
var path = FileModule.GetDirectoryPath(MajorGsmLibrary.ApplicationDirectory.Games);
var fileName = "steam.library.json";
var fileData =
File.ReadAllText(Path.Combine(path, fileName));
SteamAppList? steamAppList = JsonSerializer.Deserialize(fileData, new JsonSerializerOptions { MaxDepth = 64, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
if (steamAppList!.Applist != null)
{
var app = steamAppList.Applist.Apps.SingleOrDefault(x => x.Appid.ToString() == appId);
if (app != null) return app.Name;
}
return "Unknown";
}
}
Я вызываю класс SteamApps из приложения GTK#:
foreach (var game in Games)
{
var appName = SteamApps.CheckGameAgainstSteamLibraryWithAppId(game.AppId);
if (appName == "Unknown")
return;
game.FoundInSteamLibrary = true;
game.SteamLibraryName = appName;
}
Получаемый мной JSON выглядит следующим образом:
{
"applist": {
"apps": [
{
"appid": 1941401,
"name": ""
},
{
"appid": 1897482,
"name": ""
},
{
"appid": 2112761,
"name": ""
},
{
"appid": 1470110,
"name": "Who's Your Daddy Playtest"
},
{
"appid": 2340170,
"name": "Melon Knight"
},
{
"appid": 1793090,
"name": "Blockbuster Inc."
}
]
}
}
Подробнее здесь: https://stackoverflow.com/questions/764 ... eturn-null
Почему десериализация возвращает ноль? ⇐ C#
Место общения программистов C#
1729540758
Anonymous
Я пытаюсь десериализовать ответ SteamAPI в C# .NET 7. Я делаю запрос REST через RestSharp и сохраняю содержимое в виде файла.
Позже я загружаю файл и хотите десериализовать его для поиска с помощью LINQ. Но с различными опциями JsonSerializerOptions это не работает. SteamAppList.AppList всегда имеет значение null.
Для модели данных я использовал Json2Csharp и Jetbrains Rider.
Я пробовал разные JsonSerializerOptions< /code> и выполнил отладку с помощью VS Code и Jetbrains Rider.
Вот моя модель (SteamAppList.cs):
[Serializable]
public class SteamAppList
{
[JsonPropertyName("applist")]
public Applist Applist;
}
[Serializable]
public class Applist
{
[JsonPropertyName("apps")]
public List Apps;
}
[Serializable]
public class App
{
[JsonPropertyName("appid")]
public int Appid;
[JsonPropertyName("name")]
public string Name;
}
И мой SteamApps.cs для запроса и десериализации:
public class SteamApps
{
private readonly CancellationToken cancellationToken;
private async Task GetSteamApps()
{
var client = new RestClient();
var request = new RestRequest("https://api.steampowered.com/ISteamApps/GetAppList/v2/");
request.AddHeader("Accept", "*/*");
request.AddHeader("User-Agent", "Major GSM");
var response = await client.GetAsync(request, cancellationToken);
return response;
}
public bool RetireveAndSaveSteamApps()
{
var path = FileModule.GetDirectoryPath(MajorGsmLibrary.ApplicationDirectory.Games);
var fileName = "steam.library.json";
RestResponse restResponse = GetSteamApps().Result;
try
{
File.WriteAllText(Path.Combine(path, fileName), restResponse.Content);
}
catch (IOException exception)
{
LogModule.WriteError("Could not write steam library file!", exception);
return false;
}
catch (ArgumentNullException exception)
{
LogModule.WriteError("Missing data for steam library file", exception);
return false;
}
return true;
}
public static string CheckGameAgainstSteamLibraryWithAppId(string appId)
{
var path = FileModule.GetDirectoryPath(MajorGsmLibrary.ApplicationDirectory.Games);
var fileName = "steam.library.json";
var fileData =
File.ReadAllText(Path.Combine(path, fileName));
SteamAppList? steamAppList = JsonSerializer.Deserialize(fileData, new JsonSerializerOptions { MaxDepth = 64, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
if (steamAppList!.Applist != null)
{
var app = steamAppList.Applist.Apps.SingleOrDefault(x => x.Appid.ToString() == appId);
if (app != null) return app.Name;
}
return "Unknown";
}
}
Я вызываю класс SteamApps из приложения GTK#:
foreach (var game in Games)
{
var appName = SteamApps.CheckGameAgainstSteamLibraryWithAppId(game.AppId);
if (appName == "Unknown")
return;
game.FoundInSteamLibrary = true;
game.SteamLibraryName = appName;
}
Получаемый мной JSON выглядит следующим образом:
{
"applist": {
"apps": [
{
"appid": 1941401,
"name": ""
},
{
"appid": 1897482,
"name": ""
},
{
"appid": 2112761,
"name": ""
},
{
"appid": 1470110,
"name": "Who's Your Daddy Playtest"
},
{
"appid": 2340170,
"name": "Melon Knight"
},
{
"appid": 1793090,
"name": "Blockbuster Inc."
}
]
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/76460797/why-does-the-deserialization-return-null[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия