C# 控制台应用程序中的 JSON 反序列化和控制台输入问题

问题描述 投票:0回答:1

我有一个控制台应用程序,我想从输入文件读取命令并将相应的输出写入另一个文件。我的示例命令之一如下所示:

[{"command":"addItem","payload":{"id":1,"catId":1,"sId":1,"price":1.2,"quantity":1}}]

我正在尝试使用 System.Text.Json 反序列化此命令。这是相关的代码片段:

public class Input
{
    public string Command { get; set; }
    public object Payload { get; set; }
}
List<Input> command = JsonSerializer.Deserialize<List<Input>>(commandLine);

我选择使用对象作为 Payload 属性,因为它可能会根据命令类型而变化。但是,我面临一个问题,即在调试期间反序列化总是返回空值。

此外,我正在使用以下代码读取输入文件:

string inputFilePath = Path.Combine(Directory.GetCurrentDirectory(), "input.txt");

if (!File.Exists(inputFilePath))
{
    Console.WriteLine($"Not found: {inputFilePath}");
    return;
}

 string jsonContent = await File.ReadAllTextAsync(inputFilePath);
 List<Input> commands = JsonSerializer.Deserialize<List<Input>(jsonContent);

foreach (var commandLine in commands)
{
    await ExecuteCommand(commandLine);
}

我实现这个方法是为了方便调试,但我也想知道如何直接从控制台读取输入文件路径。

有人可以帮助我解决反序列化问题并从控制台读取输入文件路径吗?

c# json .net file console-application
1个回答
0
投票

为此,我建议使用

dynamic
类型。要正确处理反序列化,您需要使用
Newtonsoft
nuget:

using Newtonsoft.Json;

var rawJson = @"[{""command"":""addItem"",""payload"":{""id"":1,""catId"":1,""sId"":1,""price"":1.2,""quantity"":1}}]";

var deserialized = JsonConvert.DeserializeObject<dynamic>(rawJson);

Console.WriteLine(deserialized[0].command);
Console.WriteLine(deserialized[0].payload.id);
Console.WriteLine(deserialized[0].payload.catId);
Console.WriteLine(deserialized[0].payload.sId);
Console.WriteLine(deserialized[0].payload.price);
Console.WriteLine(deserialized[0].payload.quantity);
© www.soinside.com 2019 - 2024. All rights reserved.