为什么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);
我并不希望得到这样的结果,我希望它可以保持原样
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论