在SQL server中将数据转换为json的以下查询:
SELECT top(1) Convert(DATETIMEOFFSET, Convert(DATETIME2(0), [Time])) as "time.$date"
from [rops].[dbo].[PreOrder] po
where po.RetainDate > getdate() - 1
for json path;
收益率:
{"time":{"$date":"2021-01-11"}}
现在我们有一个带有Time成员的C#对象
PreOrder po = new PreOrder { time = new DateTime("14-6-2021 09:28:49") };
我需要它转换为与使用NewtonSoft JSON序列化程序的SQL服务器中的字符串相同的字符串。
string jsonString = JsonConvert.SerializeObject(preOrder, settings);
应该变成:
{"time":{"$date":"2021-01-11T00:01:57Z"}}
如何使用newtonsoftjson序列化程序将Datetime对象转换为任何字符串?
这样做:
class CustomDateTimeConverter : IsoDateTimeConverter
{
public CustomDateTimeConverter()
{
DateTimeFormat = "{ "$date": "yyyy-MM-dd" }";
}
}
收益率:
{ "time": "{ $date: yyyy-MM-dd }" }
因此,该日期周围没有引号,并且该日期在未翻译为的情况下保持yyyy-MM-dd
您需要编写一个自定义转换器:
https://dotnetfiddle.net/q2Oo28
public class MyDateConverter : IsoDateTimeConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName("$date");
base.WriteJson(writer, value, serializer);
writer.WriteEndObject();
}
}
并像这样使用它(或者如果不能向属性添加属性,则将转换后的添加到序列化程序设置中(:
public class PreOrder
{
[JsonConverter(typeof(MyDateConverter))]
public DateTime time { get; set; }
}
将输出:
{
"time": {
"$date": "2013-01-20T00:00:00Z"
}
}