【发布时间】: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 转换器?