【问题标题】:How to cause deserialization to fail when it's unable to deserialize a value?当无法反序列化值时如何导致反序列化失败?
【发布时间】:2020-07-26 18:46:51
【问题描述】:

当我序列化然后反序列化一个 getter-only 自动属性时:

class A {
  public string B { get; }
  private A() { }
  public A(int unusableConstructor) { B = "Val"; }
}

然后 Json.NET 将通过将“null”放入属性 B 来成功反序列化类 A 的实例。

但我不想这样!

跟踪确实包含消息Unable to deserialize value to non-writable property 'B' on A.,但它处于Info 级别,并且不会触发Error 事件。

有没有办法说服 Json.NET 在这种情况下产生错误或以其他方式通知我(除了尝试解析来自跟踪的信息消息)?

【问题讨论】:

    标签: c# error-handling json.net


    【解决方案1】:

    您可以将JsonSerializerSettings 传递给您的DeserializeObject<T> 方法。

    文档here.

    例子:

    var settings = new JsonSerializerSettings
    {
        MissingMemberHandling = MissingMemberHandling.Error
    };
    var myContent = JsonConvert.DeserializeObject<MyClass>(someString, settings);
    

    【讨论】:

    • 你检查了吗?对我来说,它不会在 OP 描述的情况下引发任何错误。
    • 不幸的是,这对我的情况没有影响。 Json.net 不认为无法反序列化错误或缺少成员。
    • 对不起,我没有完全理解这个问题。明确的答案将是自定义 JsonConverter:newtonsoft.com/json/help/html/CustomJsonConverter.htm。我不知道是否可以这样做!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多