如何反序列化嵌套的 json 字符串?
How to deserialize a nested json string?
假设我有这个 类:
internal class Test
{
public string value { get; set; }
public Test(string value)
{
this.value = value;
}
}
public class Response<T>
{
private string errorMessage { get; }
private T returnValue { get; }
public Response(string errorMessage, T returnValue)
{
this.errorMessage = errorMessage;
this.returnValue = returnValue;
}
public bool HasError() { return errorMessage != ""; }
public bool AssertEqualsReturnValue(object obj) { return returnValue.Equals(obj); }
}
我有这个主要功能:
string json =
@"{
""errorMessage"": ""This is an error"",
""returnValue"": {
""value"": ""this is what returns""
}
}
";
Response<Test> r = JsonSerializer.Deserialize<Response<Test>>(json); ;
Console.WriteLine(r.AssertEqualsReturnValue("this is what returns"));
Console.WriteLine(r.HasError());
我收到下一条错误消息:
System.InvalidOperationException: 'Each parameter in the deserialization constructor on type 'IntroSE.Kanban.Backend.Response`1[ConsoleApp1.Test]' must bind to an object property or field on deserialization. Each parameter name must match with a property or field on the object. The match can be case-insensitive.'
它不会反序列化,因为我需要以某种方式告诉 JsonSerializer 我在 returnValue 键中有一个 Test 对象。
我在网上看到了一些解决方案,但问题是它们都使用 JsonConverter,它在 .Net 6.0 中不再使用。
您已经定义了具有 private
可见性的 errorMessage
和 returnValue
属性。如果之后将它们更改为 public
,则不会抛出异常。
请注意,JsonInclude
属性只能用于 non-public 属性 访问器,例如 private set;
或 private get;
。
仅供参考
你可以在 VS
中做到这一点
复制json
{
"errorMessage": "这是一个错误",
“返回值”:{
"value": "这就是 returns"
}
}
选择编辑<选择性粘贴>粘贴JSON为类
检查并与您的类
进行比较
假设我有这个 类:
internal class Test
{
public string value { get; set; }
public Test(string value)
{
this.value = value;
}
}
public class Response<T>
{
private string errorMessage { get; }
private T returnValue { get; }
public Response(string errorMessage, T returnValue)
{
this.errorMessage = errorMessage;
this.returnValue = returnValue;
}
public bool HasError() { return errorMessage != ""; }
public bool AssertEqualsReturnValue(object obj) { return returnValue.Equals(obj); }
}
我有这个主要功能:
string json =
@"{
""errorMessage"": ""This is an error"",
""returnValue"": {
""value"": ""this is what returns""
}
}
";
Response<Test> r = JsonSerializer.Deserialize<Response<Test>>(json); ;
Console.WriteLine(r.AssertEqualsReturnValue("this is what returns"));
Console.WriteLine(r.HasError());
我收到下一条错误消息:
System.InvalidOperationException: 'Each parameter in the deserialization constructor on type 'IntroSE.Kanban.Backend.Response`1[ConsoleApp1.Test]' must bind to an object property or field on deserialization. Each parameter name must match with a property or field on the object. The match can be case-insensitive.'
它不会反序列化,因为我需要以某种方式告诉 JsonSerializer 我在 returnValue 键中有一个 Test 对象。 我在网上看到了一些解决方案,但问题是它们都使用 JsonConverter,它在 .Net 6.0 中不再使用。
您已经定义了具有 private
可见性的 errorMessage
和 returnValue
属性。如果之后将它们更改为 public
,则不会抛出异常。
请注意,JsonInclude
属性只能用于 non-public 属性 访问器,例如 private set;
或 private get;
。
仅供参考 你可以在 VS
中做到这一点复制json
{ "errorMessage": "这是一个错误", “返回值”:{ "value": "这就是 returns" } }
选择编辑<选择性粘贴>粘贴JSON为类
检查并与您的类
进行比较