为什么JsonConvert反序列化iOS8601格式的string时,会自动处理成简化格式

发布于 2022-09-12 04:50:02 字数 1796 浏览 22 评论 0

问题背景
语言为C#
定义了一个类型:

public class A 
{
   public string start { get; set; }
   public string end { get; set; }
   public A()
}

现在声明一个变量

var range = new A()
A.start = "2010-09-19T03:10:01.777Z";
A.end = "2020-09-19T03:10:01.777Z";

先将range序列化为string,再反序列化回去,日期字符串都没有发生改变,仍然保持“2010-09-19T03:10:01.777Z”的格式

var str = JsonConvert.SerializeObject(range);
var deserialized = JsonConvert.DeserializeObject<A>(str2);

但是当前需求是,有一个base基类,还有许多派生类继承该基类,A就是派生类中的一个

public class base
{
    [JsonProperty("type")]
    public string QueryType => GetType().Name;
    public static JsonConverter GetJsonConverter => JsonSubtypesConverterBuilder.Of(typeof(BaseQueryDefinition), "type").Build();
}
    
    public class A : base
{
   public string start { get; set; }
   public string end { get; set; }
   public A()
}

如果声明一个base类型的List,将List序列化为字符串,再反序列化为原来的模样,需要添加一个自定义的转换器来识别每个元素应该转换为哪个基类,正是添加了这个转换器之后,start的值就被转换成"09/19/2010 03:10:01"格式的了

            var list = new List<base>();
            list.Add(range);
            
            var settings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore
            };
            //添加自定义转换器
           settings1.Converters.Add(base.GetJsonConverter);

            //序列化为字符串时格式还是原样
            var str = JsonConvert.SerializeObject(list);
            
            //反序列化之后就变成简化格式了
            var deserialized2 = JsonConvert.DeserializeObject<List<base>>(str, settings);

image.png
我并不希望得到这样的结果,我希望它可以保持原样

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文