当前位置: 首页 > 知识库问答 >
问题:

反序列化NodaTime LocalDate时出现异常

齐典
2023-03-14

在反序列化包含JSON序列化LocalDate对象的JSON字符串时,我看到了一个异常(有关JSON片段,请参阅本问题末尾)。

这就是我反序列化的方式:

var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var output = JsonConvert.DeserializeObject<MyObject>(json, settings);

我看到以下异常消息

class MyObject
{
    public LocalDate Date { get; set; }
    public string AnotherProperty { get; set; }
}

下面是我试图反序列化的JSON片段:

{
    "Date": {
        "Calendar": {
            "Id": "ISO",
            "Name": "ISO",
            "MinYear": -9998,
            "MaxYear": 9999,
            "Eras": [{
                "Name": "BCE"
            }, {
                "Name": "CE"
            }]
        },
        "Year": 2017,
        "Month": 7,
        "Day": 10,
        "DayOfWeek": 1,
        "YearOfEra": 2017,
        "Era": {
            "Name": "CE"
        },
        "DayOfYear": 191
    },
    "AnotherProperty": "A string"
}

共有1个答案

秦凯旋
2023-03-14

我现在已经明白了--我的问题是我在ASP.NET路由处理程序中的错误假设。@L.B的问题其实让我多想了一点。

在本例中,我假设内置的JSON序列化程序正确地序列化了MyObject中的LocalDate:

[HttpGet("myobject")]
public MyObject GetMyObject()
{
    return new MyObject()
    {
        Date = LocalDate.FromDateTime(DateTime.Now),
        AnotherProperty = "A string"
    };
}

这个API的结果将与问题中的JSON片段相同。

为了确保localdate在每个处理程序中正确序列化,我在startup类的configureReservices方法中执行以下操作:

services.AddMvc().AddJsonOptions(options =>
{
    // NodaConverters lives in the NodaTime.Serialization.JsonNet assembly
    options.SerializerSettings.Converters.Add(NodaConverters.LocalDateConverter);
});

现在当我调用上述API时,localdate被正确序列化,如下所示:

{
    "Date":"2017-07-10",
    "AnotherProperty":"A string"
}

这也是DeserializeObject所期望的格式。

 类似资料:
  • 试图在Java中使用protobuf反序列化消息,并得到以下异常。 原因:com.google.protobuf.InvalidProtocolBufferException:在解析协议消息时,输入意外地在字段中间结束。这可能意味着输入被截断,或者嵌入的消息错误报告了自己的长度。在com.google.protobuf.InvalidProtocolBufferException.Truncate

  • 我正在用Spring Boot测试一个微服务架构,但是当Spring Session试图从redis反序列化会话时出现了一个异常。 体系结构如下: 雷迪斯 雷迪斯 网关 网关应用程序.yml 管理 我得到了以下堆栈跟踪。我注意到网关应用程序可以正确反序列化,但它在异常点使用DefaultListableBeanFactory。但Admin应用程序使用此StaticListableBeanFacto

  • 问题内容: 我需要执行RestRequest并获取一些JSON,因此我不确定我的方法是否真正异步,因为使用此方法时,UI仍然有些冻结。 特别针对以下代码行: 真的不同步吗?因为它似乎阻塞了UI。您能告诉我如何使此函数正确异步吗? 问题答案: 似乎作为参数传递给的委托正在UI线程上执行。如果是这种情况,只需使用即可在线程池上运行委托。 是田野吗?在我看来,它应该是局部变量。另外,在反序列化json之

  • 我正在尝试序列化然后反序列化多个对象。我可以毫无问题地写入文件,但当选择反序列化选项时,我会得到以下堆栈跟踪。以前,我可以成功地序列化和反序列化一个对象。

  • 我反映了JSON.NET JavaScriptDateTimeConverter类代码,复制了它,并将该类重命名为3DateTimeConverter,以便修改它以更精确和强类型的庄园格式化DateTime对象。 我让它根据JSON.NET输出强类型对象的方式输出一个类型,如: 运行JsonConverter的重写WriteJson方法来生成该值。 但是,当我尝试使用与相同转换器完全相同的设置反序

  • 我目前正在将一些代码从Jackson1.x迁移到Jackson2.5json映射器,遇到了一个1.x中没有的问题。 这是设置(参见下面的代码): 接口IPET 类Dog实现IPET IPET使用@jsonTypeInfo和@jsonSubtypes进行注释 类Human具有一个类型为IPet的属性,该属性使用@JSONSerialize(using=CustompetSerializer.clas