我有一个响应更改JSON的API。
我尝试构建一个类,并在下一个API响应出现异常时发现了这些更改。 API是UPS QUANTUM VIEW。
JSON响应:
{
"QuantumViewResponse": {
"Response": {
"TransactionReference": {
"CustomerContext": "Customer Context"
},
"ResponseStatusCode": "1",
"ResponseStatusDescription": "Success"
},
"QuantumViewEvents": {
"SubscriberID": "UserID",
"SubscriptionEvents": {
"Name": "Outbound",
"Number": "E7D1D134430FB9B",
"SubscriptionStatus": {
"Code": "A",
"Description": "Active"
},
"SubscriptionFile": [{
"FileName": "170609_163015001",
"StatusType": {
"Code": "U",
"Description": "Unread"
},
"Manifest": [{
"Shipper": {
"Name": "HART SYSTEMS",
"ShipperNumber": "E033E4",
"Address": {
"AddressLine1": "60 PLANT AVE",
"City": "HAUPPAUGE",
"StateProvinceCode": "NY",
"PostalCode": "11788-3810",
"CountryCode": "US"
}
},
"ShipTo": {
"AttentionName": "STORE MANAGER",
"PhoneNumber": "11111111111",
"Address": {
"ConsigneeName": "J. CREW (000172)",
"AddressLine1": "800 BREVARD ROAD SUITE 224",
"City": "ASHEVILLE",
"StateProvinceCode": "NC",
"PostalCode": "28806",
"CountryCode": "US"
}
},
"ReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
}],
"Service": {
"Code": "002"
},
"PickupDate": "20170609",
"ScheduledDeliveryDate": "20170613",
"ScheduledDeliveryTime": "235900",
"DocumentsOnly": "3",
"Package": {
"Activity": {
"Date": "20170609",
"Time": "160513"
},
"Dimensions": {
"Length": "00000000",
"Width": "00000000",
"Height": "00000000"
},
"DimensionalWeight": {
"UnitOfMeasurement": {
"Code": "LBS"
},
"Weight": "0000090"
},
"PackageWeight": {
"Weight": "+0009.0"
},
"TrackingNumber": "1ZE033E40258160923",
"ReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
},
{
"Number": "3",
"Value": "4345-2"
},
{
"Number": "4",
"Value": "4345-2"
},
{
"Number": "5",
"Value": "000172"
}],
"PackageServiceOptions": {
"COD": ""
}
},
"ShipmentChargeType": "T/P",
"BillToAccount": {
"Option": "03",
"Number": "4R2799"
}
},
{
"Shipper": {
"Name": "HART SYSTEMS",
"ShipperNumber": "E033E4",
"Address": {
"AddressLine1": "60 PLANT AVE",
"City": "HAUPPAUGE",
"StateProvinceCode": "NY",
"PostalCode": "11788-3810",
"CountryCode": "US"
}
},
"ShipTo": {
"AttentionName": "STORE MANAGER",
"PhoneNumber": "18282743995",
"Address": {
"ConsigneeName": "J. CREW (000730)",
"AddressLine1": "10 BROOK STREET",
"AddressLine2": "SPACE # 160",
"City": "ASHEVILLE",
"StateProvinceCode": "NC",
"PostalCode": "28803",
"CountryCode": "US"
}
},
"ReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
}],
"Service": {
"Code": "002"
},
"PickupDate": "20170609",
"ScheduledDeliveryDate": "20170613",
"ScheduledDeliveryTime": "235900",
"DocumentsOnly": "3",
"Package": {
"Activity": {
"Date": "20170609",
"Time": "160513"
},
"Dimensions": {
"Length": "00000000",
"Width": "00000000",
"Height": "00000000"
},
"DimensionalWeight": {
"UnitOfMeasurement": {
"Code": "LBS"
},
"Weight": "0000090"
},
"PackageWeight": {
"Weight": "+0009.0"
},
"TrackingNumber": "1ZE033E40260385730",
"ReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
},
{
"Number": "3",
"Value": "4345-2"
},
{
"Number": "4",
"Value": "4345-2"
},
{
"Number": "5",
"Value": "000730"
}],
"PackageServiceOptions": {
"COD": ""
}
},
"ShipmentChargeType": "T/P",
"BillToAccount": {
"Option": "03",
"Number": "4R2799"
}
}]
},
{
"FileName": "170609_200029001",
"StatusType": {
"Code": "U",
"Description": "Unread"
},
"Origin": [{
"PackageReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
},
{
"Number": "3",
"Value": "4345-2"
},
{
"Number": "4",
"Value": "4345-2"
},
{
"Number": "5",
"Value": "000172"
}],
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
}],
"ShipperNumber": "E033E4",
"TrackingNumber": "1ZE033E40258160923",
"Date": "20170609",
"Time": "191855",
"ActivityLocation": {
"AddressArtifactFormat": {
"PoliticalDivision2": "MELVILLE",
"PoliticalDivision1": "NY",
"CountryCode": "US"
}
},
"BillToAccount": {
"Option": "03",
"Number": "4R2799"
}
},
{
"PackageReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
},
{
"Number": "3",
"Value": "4345-2"
},
{
"Number": "4",
"Value": "4345-2"
},
{
"Number": "5",
"Value": "000730"
}],
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "852-01"
},
{
"Number": "2",
"Value": "852-01-INV. EQUIPMENT"
}],
"ShipperNumber": "E033E4",
"TrackingNumber": "1ZE033E40260385730",
"Date": "20170609",
"Time": "191431",
"ActivityLocation": {
"AddressArtifactFormat": {
"PoliticalDivision2": "MELVILLE",
"PoliticalDivision1": "NY",
"CountryCode": "US"
}
},
"BillToAccount": {
"Option": "03",
"Number": "4R2799"
}
}]
},
{
"FileName": "170612_014530001",
"StatusType": {
"Code": "U",
"Description": "Unread"
},
"Generic": {
"ActivityType": "DS",
"TrackingNumber": "1ZE033E49063524561",
"ShipperNumber": "E033E4",
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
}],
"PackageReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
},
{
"Number": "3",
"Value": "4329-2"
},
{
"Number": "4",
"Value": "4329-2"
},
{
"Number": "5",
"Value": "000938"
}],
"Service": {
"Code": "003"
},
"Activity": {
"Date": "20170612",
"Time": "010350"
},
"BillToAccount": {
"Option": "03",
"Number": "1630X8"
},
"ShipTo": {
"ReceivingAddressName": "HART"
}
}
},
"FileName": "170612_083005001",
"StatusType": {
"Code": "U",
"Description": "Unread"
},
"Generic": [{
"ActivityType": "DS",
"TrackingNumber": "1ZE033E49062327446",
"ShipperNumber": "E033E4",
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
}],
"PackageReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
},
{
"Number": "3",
"Value": "4329-2"
},
{
"Number": "4",
"Value": "4329-2"
},
{
"Number": "5",
"Value": "000835"
}],
"Service": {
"Code": "003"
},
"Activity": {
"Date": "20170612",
"Time": "072521"
},
"BillToAccount": {
"Option": "03",
"Number": "1630X8"
},
"ShipTo": {
"ReceivingAddressName": "HART"
}
},
{
"ActivityType": "DS",
"TrackingNumber": "1ZE033E49062795226",
"ShipperNumber": "E033E4",
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
}],
"PackageReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
},
{
"Number": "3",
"Value": "4329-4"
},
{
"Number": "4",
"Value": "4329-4"
},
{
"Number": "5",
"Value": "000888"
}],
"Service": {
"Code": "003"
},
"Activity": {
"Date": "20170612",
"Time": "073052"
},
"BillToAccount": {
"Option": "03",
"Number": "1630X8"
},
"ShipTo": {
"ReceivingAddressName": "HART"
}
},
{
"ActivityType": "DS",
"TrackingNumber": "1ZE033E49063212246",
"ShipperNumber": "E033E4",
"ShipmentReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
}],
"PackageReferenceNumber": [{
"Number": "1",
"Value": "873-01"
},
{
"Number": "2",
"Value": "873-01"
},
{
"Number": "3",
"Value": "4329-2"
},
{
"Number": "4",
"Value": "4329-2"
},
{
"Number": "5",
"Value": "000651"
}],
"Service": {
"Code": "003"
},
"Activity": {
"Date": "20170612",
"Time": "074154"
},
"BillToAccount": {
"Option": "03",
"Number": "1630X8"
},
"ShipTo": {
"ReceivingAddressName": "HART"
}
}]
}]
}
}
}
}
有时候SubscriptionFile可能是一个数组,有时候不是。 有时Manifest可以是一个数组,有时不存在或不存在。 有时Generic可能是一个有时不存在或不存在的数组。
我创建了这个类,但由于上述问题,响应更改导致它中断:
public class TransactionReference
{
public string CustomerContext { get; set; }
}
public class Response
{
public TransactionReference TransactionReference { get; set; }
public string ResponseStatusCode { get; set; }
public string ResponseStatusDescription { get; set; }
}
public class SubscriptionStatus
{
public string Code { get; set; }
public string Description { get; set; }
}
public class StatusType
{
public string Code { get; set; }
public string Description { get; set; }
}
public class Address
{
public string AddressLine1 { get; set; }
public string City { get; set; }
public string StateProvinceCode { get; set; }
public string PostalCode { get; set; }
public string CountryCode { get; set; }
}
public class Shipper
{
public string Name { get; set; }
public string ShipperNumber { get; set; }
public Address Address { get; set; }
}
public class Address2
{
public string ConsigneeName { get; set; }
public string AddressLine1 { get; set; }
public string City { get; set; }
public string StateProvinceCode { get; set; }
public string PostalCode { get; set; }
public string CountryCode { get; set; }
public string AddressLine2 { get; set; }
}
public class ShipTo
{
public string AttentionName { get; set; }
public string PhoneNumber { get; set; }
public Address2 Address { get; set; }
}
public class ReferenceNumber
{
public string Number { get; set; }
public string Value { get; set; }
}
public class Service
{
public string Code { get; set; }
}
public class Activity
{
public string Date { get; set; }
public string Time { get; set; }
}
public class Dimensions
{
public string Length { get; set; }
public string Width { get; set; }
public string Height { get; set; }
}
public class UnitOfMeasurement
{
public string Code { get; set; }
}
public class DimensionalWeight
{
public UnitOfMeasurement UnitOfMeasurement { get; set; }
public string Weight { get; set; }
}
public class PackageWeight
{
public string Weight { get; set; }
}
public class ReferenceNumber2
{
public string Number { get; set; }
public string Value { get; set; }
}
public class PackageServiceOptions
{
public string COD { get; set; }
}
public class Package
{
public Activity Activity { get; set; }
public Dimensions Dimensions { get; set; }
public DimensionalWeight DimensionalWeight { get; set; }
public PackageWeight PackageWeight { get; set; }
public string TrackingNumber { get; set; }
public List<ReferenceNumber2> ReferenceNumber { get; set; }
public PackageServiceOptions PackageServiceOptions { get; set; }
}
public class BillToAccount
{
public string Option { get; set; }
public string Number { get; set; }
}
public class Manifest
{
public Shipper Shipper { get; set; }
public ShipTo ShipTo { get; set; }
public List<ReferenceNumber> ReferenceNumber { get; set; }
public Service Service { get; set; }
public string PickupDate { get; set; }
public string ScheduledDeliveryDate { get; set; }
public string ScheduledDeliveryTime { get; set; }
public string DocumentsOnly { get; set; }
public Package Package { get; set; }
public string ShipmentChargeType { get; set; }
public BillToAccount BillToAccount { get; set; }
}
public class PackageReferenceNumber
{
public string Number { get; set; }
public string Value { get; set; }
}
public class ShipmentReferenceNumber
{
public string Number { get; set; }
public string Value { get; set; }
}
public class AddressArtifactFormat
{
public string PoliticalDivision2 { get; set; }
public string PoliticalDivision1 { get; set; }
public string CountryCode { get; set; }
}
public class ActivityLocation
{
public AddressArtifactFormat AddressArtifactFormat { get; set; }
}
public class BillToAccount2
{
public string Option { get; set; }
public string Number { get; set; }
}
public class Origin
{
public List<PackageReferenceNumber> PackageReferenceNumber { get; set; }
public List<ShipmentReferenceNumber> ShipmentReferenceNumber { get; set; }
public string ShipperNumber { get; set; }
public string TrackingNumber { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public ActivityLocation ActivityLocation { get; set; }
public BillToAccount2 BillToAccount { get; set; }
}
public class SubscriptionFile
{
public string FileName { get; set; }
public StatusType StatusType { get; set; }
public List<Manifest> Manifest { get; set; }
public List<Origin> Origin { get; set; }
public object Generic { get; set; }
}
public class SubscriptionEvents
{
public string Name { get; set; }
public string Number { get; set; }
public SubscriptionStatus SubscriptionStatus { get; set; }
public List<SubscriptionFile> SubscriptionFile { get; set; }
}
public class QuantumViewEvents
{
public string SubscriberID { get; set; }
public SubscriptionEvents SubscriptionEvents { get; set; }
}
public class QuantumViewResponse
{
public Response Response { get; set; }
public QuantumViewEvents QuantumViewEvents { get; set; }
}
public class RootObject
{
public QuantumViewResponse QuantumViewResponse { get; set; }
}
答案 0 :(得分:3)
如果您实际上并不知道整个合同,但想要使用某些字段并且不关心其他字段,则可以使用动态:
98366 Jps
96704 DataNode
97284 NodeManager
97148 ResourceManager
96919 SecondaryNameNode
好吧,如果你关心整个结构 - 除了要求合同或以某种方式预测合同之外别无他法。