Ver*_*ple 2 c# json system.text.json
public class BaseRequest : IRequest
{
public string Command { get; } = "";
}
public class GetRequest : IRequest
{
public string Command => "get";
public string Key { get; set; } = string.Empty;
}
public class SetRequest : IRequest
{
public string Command => "set";
public string Key { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
现在这是一个 json 数据字符串,我需要将其转换为基类以确定它有哪个命令。
public class BaseRequest : IRequest
{
public string Command { get; } = "";
}
public class GetRequest : IRequest
{
public string Command => "get";
public string Key { get; set; } = string.Empty;
}
public class SetRequest : IRequest
{
public string Command => "set";
public string Key { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
我认为下面的代码可以工作。
var obj = JsonSerializer.Deserialize<BaseRequest>(jsonData);
Console.WriteLine(obj.Command);
if (obj.Command == "get") {
var obj2 = JsonSerializer.Deserialize<GetRequest>(jsonData);
// ...
} else if (obj.Command == "set") {
var obj2 = JsonSerializer.Deserialize<SetRequest>(jsonData);
// ...
} else {
Console.WriteLine("Unknown command");
}
Run Code Online (Sandbox Code Playgroud)
但实际上obj's Command 是一个空字符串,最后程序陷入了最后一个if分支......
那是因为Command中的属性BaseRequest是只读的(您还没有为其声明 setter)。您需要将其修改为:
public class BaseRequest : IRequest
{
public string Command { get; set; } = "";
}
Run Code Online (Sandbox Code Playgroud)
更多信息请参见“为什么要封装?” https://www.w3schools.com/cs/cs_properties.php部分
或者,如果您不想公开曝光,set您可以使用[JsonInclude]
public class BaseRequest
{
[JsonInclude]
public string Command { get; private set; } = "";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |