我有以下xml: -
<AgentBookingStatusResponse>
<Eta>2012-11-19T15:40:15.0819269+00:00</Eta>
</AgentBookingStatusResponse>
我将其读入JObject
,然后使用以下代码将其转换为字符串:
var jsonString = JsonConvert.SerializeObject(_document);
var jsonResponse = JObject.Parse(jsonString);
var eta = (string) jsonResponse.SelectToken("AgentBookingStatusResponse.Eta") ?? null;
我得到的问题是,在执行此操作时会发生一些隐式格式,因为eta具有值:11/19/2012 15:40:15
我希望保持与XML格式相同的格式。
我如何实现这一目标,如果我想将格式更改为英国时间,我该如何做?
答案 0 :(得分:1)
您应将其编写如下:
var eta = (string)jsonResponse.SelectToken("AgentBookingStatusResponse").SelectToken("Eta");
答案 1 :(得分:0)
使用Newtonsoft的JSON.NET中的JsonConvert
类执行以下操作。要使用JSON获取数据,您可以使用Deserialize
作为模板RootClass
将其作为对象。
最后执行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);
//Deserialize to RootData Object
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
<强>更新强>
我们也可以在不首先使用JObject
中的Newtonsoft JSON.NET
创建RootClass的情况下执行此操作。
在这种情况下,我们首先使用JsonConvert.SerializeXMLNode()
将XML转换为JSON,然后我们就可以使用JObject.Parse()
。
string testXMLData = @"<AgentBookingStatusResponse><Eta>2012-11-19T15:40:15.0819269+00:00</Eta></AgentBookingStatusResponse>";
//First we convert this XML to JSON
var doc = new XmlDocument();
doc.LoadXml(testXMLData);
string jsonText = JsonConvert.SerializeXmlNode(doc);
//Then we use JObject to parse the converted JSON data to an Object
JObject jsonDataObj = JObject.Parse(jsonText);
//Grab Token "Eta" and convert to DateTime Object
var dateTimeToken = Convert.ToDateTime(jsonDataObj.SelectToken("AgentBookingStatusResponse.Eta"));
//DateTime Object to a string with UK Culture information and proper Formatting
var ukDateTime = dateTimeToken.ToString("O", CultureInfo.GetCultureInfo("en-GB"));
ukDateTime
输出:
2012-11-19T10:40:15.0819269-05:00
可以找到文档Here。