【问题标题】:Newtonsoft deserialize a same date return different outputNewtonsoft 反序列化相同的日期返回不同的输出
【发布时间】:2019-04-02 10:14:29
【问题描述】:

我正在使用 Newtonsoft 为我的 Xamarin 应用程序反序列化 JSON,在反序列化 DateTime 时遇到了一些问题。

我尝试在 asp.net C# 上使用相同的代码,并将数据存储到数据集中。 C# 给了我正确的输出。但是,当它转到 Xamarin 形式时,它会产生错误的输出。

预期结果应该是2/4/2019 12:00:00 AM。

我不知道4/1/2019 4:00:00PM 是怎么来的。

使用 Xamarin 输出错误

使用 C# 正确输出

使用 Xamarin

public List<GetFleet> GetDefaults(string xUserID)
    {
        string inJson = 
        List<GetFleet> tempList = new List<GetFleet>();
        try
        {
            Uri serverUri2 = new Uri(inJson.ToString());

            string rs2 = RequestGeoHttpAsString(serverUri2);

            DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(rs2);

            DataTable dataTable = dataSet.Tables["Table1"];

            foreach (DataRow row in dataTable.Rows)
            {
                tempList.Add(new GetFleet
                {
                    FleetID = row["registrationNumber"].ToString(),
                    FleetName = row["Location"].ToString(),
                    FleetIgnition = row["Ignition"].ToString(),
                    FleetFuel1 = row["sFuel1"].ToString(),
                    FleetStartTime = row["startTime"].ToString()

                });
            }

        }
        catch (Exception ex)
        {
            string exe = ex.Message;
        }
        return tempList;
    }

使用 C#

protected void Page_Load(object sender, EventArgs e)
    {
        string url = 
        Uri serverUri2 = new Uri(url.ToString());

        string rs2 = RequestGeoHttpAsString(serverUri2);

        DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(rs2);

        DataTable dataTable = dataSet.Tables["Table1"];

        string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
        Response.Write(json);
    }

    public string RequestGeoHttpAsString(Uri address)
    {
        string result = "";


        // Create the web request  
        HttpWebRequest request = System.Net.WebRequest.Create(address) as HttpWebRequest;

        // Get response  
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            // Get the response stream  
            StreamReader reader = new StreamReader(response.GetResponseStream());

            // Read the whole contents and return as a string  
            result = reader.ReadToEnd();

        }

        return result;
    }

【问题讨论】:

  • 您收到的实际 json 是什么?看起来很可疑,您正在获取不同的数据。
  • 我想,你看的不是同一张唱片。 fuel1 的值也不同。 190.60 与 191.16
  • 不会是时间偏移的问题吗?
  • DateTime 序列化将受您的语言环境设置影响 - 您确定您正在测试的两个系统具有相同的语言环境吗?
  • 会不会是格式问题?反序列化时是否使用 dateTime 转换器?

标签: c# json xamarin json.net


【解决方案1】:

我在这个问题上使用了另一种替代解决方案。 我在后端将日期转换为字符串/VARCHAR。 当它以 JSON 格式返回时,它将是文本。

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多