C# JsonSerializer.Deserialize在反序列化不同类时应引发异常

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

.NETCore3.1中,我使用
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兼容,就像
{}
Bc在Json中不存在,因此反序列化后将为空。
3-读者可以阅读Json

例如,如果json类似于:
[]


我希望这对您有所帮助。

如果您正在中寻找与Newtonsoft或功能相当的功能,则该功能不存在。从:必需属性。。。如果未收到目标类型的某个属性的值,System.Text.Json不会引发异常。。。如果JSON中没有属性,要使反序列化失败,请实现一个自定义转换器。。。System.Text.Json忽略Json中的额外属性,除非使用[JsonExtensionData]属性。缺少成员功能没有解决方法。好的,我知道了。谢谢你的帮助我误解了这里的兼容词。谢谢你的澄清!