VS2022控制台应用中JSON参数反序列化失败问题排查
控制台参数传递JSON反序列化失败问题
环境
Visual Studio 2022 控制台应用
我尝试通过控制台参数传递JSON字符串,但反序列化时遇到问题。已使用Paste Special功能从JSON示例生成对应的实体类。
示例JSON
[ { "CustomerId": 1, "CustomerName": "Test1" }, { "CustomerId": 2, "CustomerName": "Test2" } ]
launchSettings.json配置
{ "profiles": { "ConsoleApp4": { "commandName": "Project", "commandLineArgs": "[ { \"CustomerId\": 1, \"CustomerName\": \"Test1\" }, { \"CustomerId\": 2, \"CustomerName\": \"Test2\" } ]" } } }
Program.cs代码
namespace ConsoleApp4 { internal class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); var result = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(args[0]); } } public class Rootobject { public Class1[] Property1 { get; set; } } public class Class1 { public int CustomerId { get; set; } public string CustomerName { get; set; } } }
错误信息
JSON值无法转换为ConsoleApp4.Rootobject。路径: $ | LineNumber: 0 | BytePositionInLine: 1。
问题原因及修复
核心问题是JSON结构和实体类类型不匹配:
- 传入的JSON是
Class1对象的数组(外层为[]),但代码里却试图反序列化成Rootobject类型——这个类要求JSON外层是包含Property1字段的对象,和传入的结构完全不符。
修复方案一(推荐,适配现有JSON)
直接修改反序列化的目标类型为Class1[]数组:
var result = System.Text.Json.JsonSerializer.Deserialize<Class1[]>(args[0]);
修复方案二(修改JSON适配实体类)
如果必须保留Rootobject类型,需要调整传入的JSON结构,让它符合实体类定义:
{ "Property1": [ { "CustomerId": 1, "CustomerName": "Test1" }, { "CustomerId": 2, "CustomerName": "Test2" } ] }
同时更新launchSettings.json中的commandLineArgs为上述JSON(注意转义双引号):
"commandLineArgs": "{ \"Property1\": [ { \"CustomerId\": 1, \"CustomerName\": \"Test1\" }, { \"CustomerId\": 2, \"CustomerName\": \"Test2\" } ] }"
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

