将JSON日期时间读入C# - DateTime无法正确通过

时间:2014-03-10 11:40:08

标签: c# asp.net-mvc

注意*我知道第二种方法有不同的名称,但“GetConsignmentByStatusId”方法只是将它传递给'GetExportConsignment'而不做任何事情。

当从MVC应用程序传递服务时,我在.Net C#类中获得不同的日期时间。我以前搜索过,但我不熟悉JSON所以不太确定我需要看什么

这是调用服务的MVC代码。 'ConsignmentSearch'对象导致了问题。所以在这里它被序列化了。

public IEnumerable<ConsignmentInfo> LoadConsignmentByStatusId(int userId, int companyId, string language, int statusId, int pageNumber, int pageSize, ConsignmentSearch search)
    {
        IEnumerable<ConsignmentInfo> consignmentInfo = null;
        var serializer = new JavaScriptSerializer();
        string jsonInput = serializer.Serialize(search);
        var content = new StringContent(jsonInput, Encoding.UTF8, "application/json");

        HttpResponseMessage response = Client.PostAsync(
            string.Format("Consignment/GetConsignmentByStatusId?userId={0}&companyId={1}&language={2}&pageNumber={3}&numRecs={4}&statusId={5}", userId, companyId, language, pageNumber, pageSize, statusId)
            , content).Result;

        if (response.IsSuccessStatusCode)
        {
            consignmentInfo = response.Content.ReadAsAsync<IEnumerable<ConsignmentInfo>>().Result;
        }
        else
        {
            throw new Exception(response.ReasonPhrase);
        }
        return consignmentInfo;
    }

然后这是服务中代码的一部分。此对象中有2个日期时间字段 这与传递的内容总是不同的。我需要做些什么来阅读正确的日期?任何帮助或链接将不胜感激。

public static IEnumerable<ConsignmentInfo> GetExportConsignment(int userId, int companyId, string locale, ConsignmentSearch search, int pageNumber, int numRecs, int statusId)
    {

        var consignmentStatusList = new List<ConsignmentInfo>();
        SQLDataAccess db = DatabaseFactory.CreateDatabase(GlobalsManager.DbConnectionString) as SQLDataAccess;
        DbCommand cmd = db.GetStoredProcCommand("Logistics.spGTSConnectGetExportConsignment");

        db.AddInParameter(cmd, "UserId", DbType.Int32, userId);
        db.AddInParameter(cmd, "CompanyId", DbType.Int32, companyId);
        db.AddInParameter(cmd, "Locale", DbType.String, locale);
        if (!string.IsNullOrEmpty(search.ConsignmentNumber))
        {
            db.AddInParameter(cmd, "ConsignmentNumber", DbType.String, search.ConsignmentNumber);
        }
        if (!string.IsNullOrEmpty(search.HouseWaybillNumber))
        {
            db.AddInParameter(cmd, "HouseBillNumber", DbType.String, search.HouseWaybillNumber);
        }
        if (search.DateOfLoadingFrom != null)
        {
            db.AddInParameter(cmd, "DateOfLoadingFrom", DbType.DateTime, search.DateOfLoadingFrom);
        }

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,在这里

我添加了以下方法

 JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
        };

然后将LoadConsignmentByStatusId方法更改为此

 public IEnumerable<ConsignmentInfo> LoadConsignmentByStatusId(int userId, int companyId, string language, int statusId, int pageNumber, int pageSize, ConsignmentSearch search)
        {
            IEnumerable<ConsignmentInfo> consignmentInfo = null;
            var content = new StringContent(JsonConvert.SerializeObject(search, microsoftDateFormatSettings), Encoding.UTF8, "application/json");

答案 1 :(得分:-1)

如果您使用JS向您的服务请求/发送数据,您可以使用以下脚本来修复JSON上的日期:

function convertJsonDate(dateString) {
    var date = new Date(dateString.match(/\d+/)[0] * 1);
    var dd = date.getDate()
    if (dd < 10) dd = '0' + dd
    var mm = date.getMonth() + 1  // now moths are 1-12
    if (mm < 10) mm = '0' + mm
    var yy = date.getFullYear()
    if (yy < 100) yy = '20' + yy

    return mm + '/' + dd + '/' + yy;
}