Serialize NodaTime JSON

前端 未结 2 1779
南方客
南方客 2021-02-10 07:40

I am making a prototype project of NodaTime compared to BCL\'s DateTime, but executing this result gives me recursionLimit exceeded error.

相关标签:
2条回答
  • 2021-02-10 07:53

    Serialization is supported for JSON.NET in Noda Time 2.0+.

    You'll need to install the package with NuGet:

    > Install-Package NodaTime.Serialization.JsonNet
    

    And then configure your serializer settings to use it. This won't work with the default serializer/deserializer - you need to configure one explicitly.

    We chose to use one statically. Your usage may be different. Here is an example:

    using Newtonsoft.Json;
    using NodaTime;
    using NodaTime.Serialization.JsonNet; // << Needed for the extension method to appear!
    using System;
    
    namespace MyProject
    {
        public class MyClass
        {
            private static readonly JsonSerializerSettings _JsonSettings;
    
            static MyClass()
            {
                _JsonSettings = new JsonSerializerSettings
                {
                    // To be honest, I am not sure these are needed for NodaTime,
                    // but they are useful for `DateTime` objects in other cases.
                    // Be careful copy/pasting these.
                    DateFormatHandling = DateFormatHandling.IsoDateFormat,
                    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
                };
    
                // Enable NodaTime serialization
                // See: https://nodatime.org/2.2.x/userguide/serialization
                _JsonSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
            }
    
            // The rest of your code...
        }
    }
    
    0 讨论(0)
  • 2021-02-10 08:08

    We don't currently have any support for JavaScriptSerializer: I suspect you'll have to use Json.NET for all your JSON serialization. The user guide page on serialization gives a little bit more information, but it does mostly assume you already know about Json.NET.

    The good news is that Json.NET is pretty easy to use - you may well find it's as simple as:

    var settings = new JsonSerializerSettings();
    settings.ConfigureForNodaTime();
    string json = JsonConvert.SerializeObject(model, settings);
    

    (Or use JsonSerializer.)

    As an aside, the way you're using the Noda Time types is a little odd to say the least - it may well be worth asking another question with details of what you're trying to achieve, and we can work out a more idiomatic way of doing it :)

    0 讨论(0)
提交回复
热议问题