我正在从Firestore数据库阅读数据,并使用C# Web API中的Newtonsoft将其转换为JSON。但是,时间戳字段始终转换为空对象。
ds is a DocumentSnapshot
Dictionary<string, object> d = ds.ToDictionary();
JToken jt = JToken.FromObject(d);
上面的代码返回了一个空的“date”字段对象,它是一个Firestore Timestamp:
date: {}
我做了以下工作作为变通:
var dt = d.GetValueOrDefault("date");
if (dt != null)
{
var dts = dt.ToString().Remove(0, 11);
d["date"] = dts;
}
我已经尝试了各种日期选项的转换,但没有一个做任何事情。
1条答案
按热度按时间lnlaulya1#
类型
Google.Cloud.Firestore.Timestamp
没有公共属性,这就是它被序列化为空对象{}
的原因。要将其序列化为RFC 3339 UTC Timestamp字符串,您需要创建一个customJsonConverter<Timestamp>
:或者,如果您需要生成的JSON Timestamp值精确地遵守Google预期的RFC 3339格式,您可以使用
Google.Apis.Json.RFC3339DateTimeConverter
来格式化值:无论哪种方式,都要使用以下设置序列化为
JToken
:或者转换为JSON字符串,如下所示:
字典
d
的JSON结果如下所示:对于第一个转换器,或
第二个(区别似乎只是在精度上。)
演示小提琴here和here。