反序列化不可预测的JSON响应

时间:2017-06-23 15:01:10

标签: c# json json.net

我有一个响应更改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; }
}

1 个答案:

答案 0 :(得分:3)

如果您实际上并不知道整个合同,但想要使用某些字段并且不关心其他字段,则可以使用动态

98366 Jps
96704 DataNode
97284 NodeManager
97148 ResourceManager
96919 SecondaryNameNode

好吧,如果你关心整个结构 - 除了要求合同或以某种方式预测合同之外别无他法。