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

问题背景
语言为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
我并不希望得到这样的结果,我希望它可以保持原样

阅读 1.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进