C# JsonSerializer.Deserialize在反序列化不同类时应引发异常
在.NETCore3.1中,我使用C# JsonSerializer.Deserialize在反序列化不同类时应引发异常,c#,json,.net-core,serialization,system.text.json,C#,Json,.net Core,Serialization,System.text.json,在.NETCore3.1中,我使用System.Text.Json.JsonSerializer来处理Json对象。当我试图编写一个错误案例时,JsonSerializer.Deserialize()获取的Json字符串的类型与T不同,我没有得到任何异常 下面是一个示例代码: using System; using System.Text.Json; namespace JsonParsing { class Program { { tr
System.Text.Json.JsonSerializer
来处理Json对象。当我试图编写一个错误案例时,JsonSerializer.Deserialize()
获取的Json字符串的类型与T
不同,我没有得到任何异常
下面是一个示例代码:
using System;
using System.Text.Json;
namespace JsonParsing
{
class Program
{
{
try
{
B b = JsonSerializer.Deserialize<B>( JsonSerializer.Serialize( new A() { a = "asdf" } ) );
Console.WriteLine( $"b:{b.b}" );
}
catch( JsonException ex )
{
Console.WriteLine( $"Json error: {ex.Message}" );
}
}
}
public class A
{
public A() {}
public string a { get; set; }
}
public class B
{
public B() {}
public string b { get; set; }
public C c { get; set; }
}
public class C
{
public C() {}
public int c { get; set; }
}
}
使用系统;
使用System.Text.Json;
命名空间JsonParsing
{
班级计划
{
{
尝试
{
B B=JsonSerializer.Deserialize(JsonSerializer.Serialize(newa(){A=“asdf”}));
Console.WriteLine($“b:{b.b}”);
}
捕获(JsonException ex)
{
WriteLine($“Json错误:{ex.Message}”);
}
}
}
公共A类
{
公共A(){}
公共字符串a{get;set;}
}
公共B级
{
公共B(){}
公共字符串b{get;set;}
公共C{get;set;}
}
公共C类
{
公共C(){}
公共int c{get;set;}
}
}
我的期望是抛出一个JsonException
,如中所述。相反,我在控制台中得到的WriteLine($“b:{b.b}”)
是b
的对象,每个属性都包含null
我遗漏了什么吗?根据文档,如果出现以下情况,将抛出expetion: JSON无效。
-或-
TValue与JSON不兼容。
-或-
无法从读取器读取值 守则:
JsonSerializer.Serialize( new A { a = "asdf" } )
Geneate json-like:
{ "a", "asdf" }
因此没有引发异常,因为:1-Json是有效的。
2-
B
与此Json兼容,就像{}
,B和c在Json中不存在,因此反序列化后将为空。3-读者可以阅读Json 例如,如果json类似于:
”
或[]
我希望这对您有所帮助。如果您正在中寻找与Newtonsoft或功能相当的功能,则该功能不存在。从:必需属性。。。如果未收到目标类型的某个属性的值,System.Text.Json不会引发异常。。。如果JSON中没有属性,要使反序列化失败,请实现一个自定义转换器。。。System.Text.Json忽略Json中的额外属性,除非使用[JsonExtensionData]属性。缺少成员功能没有解决方法。好的,我知道了。谢谢你的帮助我误解了这里的兼容词。谢谢你的澄清!