问题
DateTime格式从2019-04-09T11:43:11Z更改到2019-04-09T11:43:11+00:0我的队列消息。
详细信息
考虑两个蔚蓝函数F1和F2。F1在f2-queue中对消息进行排队。
为理解信息的编写,请考虑以下类:
public class MyRequest
{
public int Id {get; set;}
public object Obj {get; set;}
}
public Class MyMessage
{
public DateTime UpdatedDate {get; set;}
}我正在使用ADO.NET从数据库中读取。
myMessage.UpdatedDate = DateTime.SpecifyKind(Convert.ToDateTime(reader["Updated_Date"]), DateTimeKind.Utc);
myRequest.Obj = myMessage;我使用myRequest序列化JsonConvert.SerializeObject。序列化对象的日期时间为2019-04-09T11:43:11Z.。我在myRequest中加入了f2-queue队列。
F2是由队列触发的azure函数。
[FunctionName("F2")]
public static async Task Run([QueueTrigger("f2-queue", Connection = "")]MyRequest myRequest, ILogger log)在这里,在2019-04-09T11:43:11+00:00.中,UpdatedDate的DateTime格式更改为
我试过的东西
MyRequest本身中,并将DateTime.UtcNow存储在其中。在这种情况下,DateTime格式不会改变。DateTime.Kind是DateTime.Kind改为上述方法。DateTime.Kind现在是Utc,但DateTime格式仍在改变。发布于 2019-04-16 14:59:08
这似乎是因为Newtonsoft在将DateTimes设置为UTCvs.Local时是如何序列化的。为了改变这个服务器端,您可以使用一个DateFormatString设置来覆盖默认值。
我使用控制台应用程序对其进行了测试,但是函数中的行为应该是相同的。函数项目的基础WebJob是基于控制台应用程序的。
namespace ConsoleApp8
{
class Program
{
static void Main(string[] args)
{
var serializerSettings = new JsonSerializerSettings()
{
DateFormatString = "yyyy-MM-ddThh:mm:ssZ"
};
Console.WriteLine($"DateTime.Now: {JsonConvert.SerializeObject(DateTime.Now)}, DateTime.Now Kind: {DateTime.Now.Kind}");
Console.WriteLine($"DateTime.UtcNow: {JsonConvert.SerializeObject(DateTime.UtcNow)}, DateTime.UtcNow Kind: {DateTime.UtcNow.Kind}");
Console.WriteLine($"DateTime.Now with formatting: {JsonConvert.SerializeObject(DateTime.Now, serializerSettings)}, DateTime.Now Kind: {DateTime.Now.Kind}");
Console.ReadLine();
}
}
}守则输出以下内容:
DateTime.Now:"2019-04-16T10:53:54.6557713-04:00",DateTime.Now种类:本地 DateTime.UtcNow:"2019-04-16T14:53:54.9357612Z",DateTime.UtcNow种类: Utc DateTime.Now格式:“2019-0416T10:53:54Z”,DateTime.Now种类:本地
https://stackoverflow.com/questions/55598626
复制相似问题