使用Newtonsoft的JSON.NET中的
JsonConvert
类,按照以下步骤操作。要将数据转换为JSON格式,可以使用
RootClass
作为模板,通过
Deserialize
方法将其反序列化为对象。
最后使用
CultureInfo.GetCultureInfo("en-GB")
获取英国的日期格式,然后显示或进行其他操作。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.Xml;
using Newtonsoft.Json;
namespace ConsoleApplication1
{
public class AgentBookingStatusResponse
{
public DateTime Eta { get; set; }
}
public class RootData
{
public AgentBookingStatusResponse AgentBookingStatusResponse { get; set; }
}
public class Program
{
static void Main(string[] args)
{
string testXMLData = @"<AgentBookingStatusResponse><Eta>2012-11-19T15:40:15.0819269+00:00</Eta></AgentBookingStatusResponse>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(testXMLData);
string jsonText = JsonConvert.SerializeXmlNode(doc);
var dataObj = JsonConvert.DeserializeObject<RootData>(jsonText);
var datetime = new DateTime();
datetime = Convert.ToDateTime(dataObj.AgentBookingStatusResponse.Eta);
CultureInfo uk = CultureInfo.GetCultureInfo("en-GB");
string ukDate = datetime.ToString("O", uk);
Console.WriteLine(ukDate);
Console.ReadKey();
}
}
}
jsonText
输出:
{
"AgentBookingStatusResponse": {
"Eta": "2012-11-19T15:40:15.0819269+00:00"
}
}
ukDate
输出:
2012-11-19T10:40:15.0819269-05:00
更新
我们也可以通过使用Newtonsoft JSON.NET
中的JObject
而无需先创建一个RootClass来完成此操作。
在这种情况下,我们首先将XML转换为JSON,使用JsonConvert.SerializeXMLNode()
,然后我们可以像这样使用JObject.Parse()
。
string testXMLData = @"<AgentBookingStatusResponse><Eta>2012-11-19T15:40:15.0819269+00:00</Eta></AgentBookingStatusResponse>";
var doc = new XmlDocument();
doc.LoadXml(testXMLData);
string jsonText = JsonConvert.SerializeXmlNode(doc);
JObject jsonDataObj = JObject.Parse(jsonText);
var dateTimeToken = Convert.ToDateTime(jsonDataObj.SelectToken("AgentBookingStatusResponse.Eta"));
var ukDateTime = dateTimeToken.ToString("O", CultureInfo.GetCultureInfo("en-GB"));
ukDateTime
输出:
2012-11-19T10:40:15.0819269-05:00
文档可以在这里找到。
SelectToken
格式化日期的方法。只有一种方法重载允许在没有匹配令牌时出现错误。 - Dayan