Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net核心WebApi控制器中未正确接收DateTime属性值_C#_Json_Asp.net Core_Json Deserialization - Fatal编程技术网

C# Asp.Net核心WebApi控制器中未正确接收DateTime属性值

C# Asp.Net核心WebApi控制器中未正确接收DateTime属性值,c#,json,asp.net-core,json-deserialization,C#,Json,Asp.net Core,Json Deserialization,我正在使用Asp.NETCore2.2WebAPI和WinForm客户端发送请求。我正在使用RestSharp库作为Restclient。WebApi控制器中似乎没有正确处理DateTime类型的属性值 源日期时间: 目标日期时间: 客户端代码: internal virtual void Add(T1 businessObject) { RestRequest request = new RestRequest(ManagementControllerName + @"/" + A

我正在使用Asp.NETCore2.2WebAPI和WinForm客户端发送请求。我正在使用RestSharp库作为Restclient。WebApi控制器中似乎没有正确处理DateTime类型的属性值

源日期时间:

目标日期时间:

客户端代码:

internal virtual void Add(T1 businessObject)
{
    RestRequest request = new RestRequest(ManagementControllerName + @"/" + AddActionPrefix, Method.POST);
    request.RequestFormat = DataFormat.Json;
    request.AddJsonBody(businessObject);
    var response = Globals.ServiceStackClient.Execute(request);

    if (!response.IsSuccessful)
    {
        var ex = JsonConvert.DeserializeObject<AppExceptionMessage>(response.Content);

        throw new ClientSideException(ex);
    };
}
WebApi控制器:

[HttpPost]
[Route("Add")]
public ActionResult<T1> Add([FromBody] T1 businessObject)
{
    try
    {
        CurrentDbStorage.StartTransaction();
        var mainCmd = CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
        mainCmd.ExecuteNonQuery();
        ProcessPostAdd(businessObject);
        CurrentDbStorage.CommitTransaction();
    }
    catch (Exception ex)
    {
        CurrentDbStorage.RollbackTransaction();
        var parsedEx = CurrentExceptionMgr.ParseErrorMsg(ex.Message);
        return new BadRequestObjectResult(parsedEx);
    };

    return Ok(businessObject);
}
[HttpPost]
[路线(“添加”)]
公共操作结果添加([FromBody]T1 businessObject)
{
尝试
{
CurrentDbStorage.StartTransaction();
var mainCmd=CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
mainCmd.ExecuteNonQuery();
ProcessPostAdd(businessObject);
CurrentDbStorage.CommitTransaction();
}
捕获(例外情况除外)
{
CurrentDbStorage.RollbackTransaction();
var parsedEx=CurrentExceptionMgr.ParseErrorMsg(例如Message);
返回新的BadRequestObjectResult(parsedEx);
};
返回Ok(businessObject);
}
在控制器内设置断点,它向我显示BusinessObject反序列化错误,比如DocItemDt属性值小于客户端发送的实际值。在谷歌上冲浪时,Json日期时间处理有一些问题,但是没有一个对我有帮助


感谢您的帮助。

您向控制器传递了哪些值,以及您收到了哪些值?您说…像DocItemDt属性值小于客户端发送的实际值。。。这些值是什么?如果在调试器中展开
DocItemDt
,它将告诉您是本地时间还是UTC。您能否确认这两个日期都是本地日期,还是都是UTC?如果一个是本地的,另一个是UTC的,那就好了。在我的个人计算机中,一切都正常工作,但当我将WebApi和WinClient部署到物理计算机时,问题就出现了。有趣的是,这两台计算机都有相同的时区:巴库+4:00。这两个项目都部署在远程桌面上。超时4小时。你的时区是+4。我怀疑这可能有关系。但我打赌他们并非都是UTC。一个是UTC,另一个是本地(巴库+4)。只需将两者转换为UTC。
[HttpPost]
[Route("Add")]
public ActionResult<T1> Add([FromBody] T1 businessObject)
{
    try
    {
        CurrentDbStorage.StartTransaction();
        var mainCmd = CurrentDbStorage.GenerateCrudInsertCommand(businessObject);
        mainCmd.ExecuteNonQuery();
        ProcessPostAdd(businessObject);
        CurrentDbStorage.CommitTransaction();
    }
    catch (Exception ex)
    {
        CurrentDbStorage.RollbackTransaction();
        var parsedEx = CurrentExceptionMgr.ParseErrorMsg(ex.Message);
        return new BadRequestObjectResult(parsedEx);
    };

    return Ok(businessObject);
}