gpt4 book ai didi

c# - 无法反序列化 JSON 内容

转载 作者:太空狗 更新时间:2023-10-30 01:19:01 24 4
gpt4 key购买 nike

我在stack overflow看到了很多类似的问题。但是,这并没有太大帮助。我在反序列化 JSON 时遇到问题。详情如下:

JSON 内容

    {
"TicketDetails": {

"General": {
"TicketingCity": "DEL",
"ContactNumber": "4567576574",
"Email": "XXX@example.com"
},
"PassengerDetails": {
"Passengers": {
"Passenger": [
{
"PassengerNum": "1",
"Title": "MR",
"LastName": "XXXX",
"FirstName": "XXXXX",
"PassType": "ADT",
"Age": "30",
"DateOfBirth": "05OCT1983"
},
{
"PassengerNum": "2",
"Title": "MS",
"LastName": "XXX",
"FirstName": "XXX",
"PassType": "ADT",
"Age": "19",
"DateOfBirth": "03JUN1994"
}
]
}
},
"Onward": {
"Flights": {
"Flight": [
{
"SegmentNum": "1",
"Vendor": "AI",
"FltNum": "935",
"Class": "Y",
"StartDt": "20141010",
"StartAirport": "CCJ",
"EndAirport": "BOM",
"Status": "NN",
"StartTm": "1300",
"EndTm": "1530",
"DtChg": "00"
},
{
"SegmentNum": "2",
"Vendor": "AI",
"FltNum": "935",
"Class": "Y",
"StartDt": "20141010",
"StartAirport": "BOM",
"EndAirport": "DXB",
"Status": "NN",
"StartTm": "1700",
"EndTm": "2000",
"DtChg": "00"
}
]
}
},
"ReturnTrip": {
"Flights": {
"Flight": [
{
"SegmentNum": "1",
"Vendor": "AI",
"FltNum": "935",
"Class": "Y",
"StartDt": "20141010",
"StartAirport": "DXB",
"EndAirport": "BOM",
"Status": "NN",
"StartTm": "1300",
"EndTm": "1530",
"DtChg": "00"
},
{
"SegmentNum": "2",
"Vendor": "AI",
"FltNum": "935",
"Class": "Y",
"StartDt": "20141010",
"StartAirport": "BOM",
"EndAirport": "CCJ",
"Status": "NN",
"StartTm": "1700",
"EndTm": "2000",
"DtChg": "00"
}
]
}
}
}
}

实体类我创建了一个应该将其映射到的实体类。如下所示:

 public class EntityTicketingDetailsINReq
{
public class TicketDetails
{
[XmlElement("General")]
public General General { get; set; }
[XmlElement("PassengerDetails")]
public PassengerDetails PassengerDetails { get; set; }
[XmlElement("Onward")]
public Onward Onward { get; set; }
[XmlElement("ReturnTrip")]
public ReturnTrip ReturnTrip { get; set; }
}
public class General
{
[XmlElement("TicketingCity")]
public string TicketingCity { get; set; }
[XmlElement("ContactNumber")]
public string ContactNumber { get; set; }
[XmlElement("Email")]
public string Email { get; set; }
}
public class PassengerDetails
{
[XmlElement("Passengers")]
public Passengers Passengers { get; set; }

}
public class Passengers
{
[XmlElement("Passenger")]
public List<Passenger> Passenger { get; set; }
}
public class Passenger
{
[XmlElement("PassengerNum")]
public string PassengerNum { get; set; }
[XmlElement("Title")]
public string Title { get; set; }
[XmlElement("LastName")]
public string LastName { get; set; }
[XmlElement("FirstName")]
public string FirstName { get; set; }
[XmlElement("PassType")]
public string PassType { get; set; }
[XmlElement("Age")]
public string Age { get; set; }
[XmlElement("DateOfBirth")]
public string DateOfBirth { get; set; }

}
public class Onward
{
[XmlElement("Flights")]
public Flights Flights { get; set; }
}
public class Flights
{
[XmlElement("Flight")]
public List<Flight> Flight { get; set; }
}
public class Flight
{
[XmlElement("SegmentNum")]
public string SegmentNum { get; set; }
[XmlElement("Vendor")]
public string Vendor { get; set; }
[XmlElement("FltNum")]
public string FltNum { get; set; }
[XmlElement("Class")]
public string Class { get; set; }
[XmlElement("StartDt")]
public string StartDt { get; set; }
[XmlElement("StartAirport")]
public string StartAirport { get; set; }
[XmlElement("EndAirport")]
public string EndAirport { get; set; }
[XmlElement("Status")]
public string Status { get; set; }
[XmlElement("StartTm")]
public string StartTm { get; set; }
[XmlElement("EndTm")]
public string EndTm { get; set; }
[XmlElement("DtChg")]
public string DtChg { get; set; }

}

public class ReturnTrip
{
[XmlElement("Flights")]
public Flights Flights { get; set; }
}
}

我的尝试现在这就是我正在做的反序列化。:

var Jsonticketdetails = new EntityTicketingDetailsINReq.TicketDetails();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(EntityTicketingDetailsINReq.TicketDetails));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Jsoncontent));
Jsonticketdetails = (EntityTicketingDetailsINReq.TicketDetails)ser.ReadObject(ms);

但是映射不成功。 JSON 中的值未设置为实体对象。一切都是空的。我已经在这个问题上工作了一段时间了,我真的很困惑。有人能告诉我我做错了什么以及需要做些什么来解决这个问题吗?

PS:我需要 [XMLElement],因为我使用相同的实体类来存储从 XML 请求反序列化的值。

最佳答案

尝试在 EntityTicketingDetailsINReq 类中添加一个名为 Root 的新类。

public class EntityTicketingDetailsINReq
{
public class Root
{
public TicketDetails TicketDetails { get; set; }
}

// other classes omitted
}

然后反序列化为Root

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(EntityTicketingDetailsINReq.Root));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Jsoncontent));
var root = (EntityTicketingDetailsINReq.Root)ser.ReadObject(ms);

它应该可以工作

enter image description here

PS:XmlElement 不需要,可以全部去掉

关于c# - 无法反序列化 JSON 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24751580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com