json序列化程序将datetime转换为任何字符串



在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"
}
}

相关内容

  • 没有找到相关文章

最新更新