Я пытаюсь взять XML ответ из API остальных и сделать из него строку JSON. И оттуда десериализуйте его и используйте как строго типизированный объект в C#. Пока я только частично успешен.
Ответ от API - список заказов. Похоже, это сокращенно.
<OrderList>
<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" href="/__API__/order/1" order_id="1">
<OrderNo>1</OrderNo>
<ErpOrderNo xsi:nil="true" />
<Customer href="/__API__/customer/42">1</Customer>
<State>DENIED</State>
<PaymentState>PAID</PaymentState>
<PaymentIsCaptured>false</PaymentIsCaptured>
<CaptureTime xsi:nil="true" />
<PaymentIsCancelled>false</PaymentIsCancelled>
<CancelTime xsi:nil="true" />
<CreatedTime>2018-11-06T15:00:00Z</CreatedTime>
<ChangedTime>2019-05-06T12:45:30Z</ChangedTime>
<SyncedTime xsi:nil="true" />
</Order>
<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" href="/__API__/order/2" order_id="2">
<OrderNo>2</OrderNo>
<ErpOrderNo xsi:nil="true" />
<Customer href="/__API__/customer/42">1</Customer>
<State>DENIED</State>
<PaymentState xsi:nil="true" />
<PaymentIsCaptured>false</PaymentIsCaptured>
<CaptureTime xsi:nil="true" />
<PaymentIsCancelled>false</PaymentIsCancelled>
<CancelTime xsi:nil="true" />
<CreatedTime>2018-11-06T15:49:47Z</CreatedTime>
<ChangedTime>2019-05-06T12:45:30Z</ChangedTime>
<SyncedTime xsi:nil="true" />
</Order>
</OrderList>
И JSON выглядит так:
{
"OrderList": {
"Order": [{
"-xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"-href": "/__API__/order/1",
"-order_id": "1",
"OrderNo": "1",
"ErpOrderNo": {
"-xsi:nil": "true"
},
"Customer": {
"-href": "/__API__/customer/42",
"#text": "1"
},
"State": "DENIED",
"PaymentState": "PAID",
"PaymentIsCaptured": "false",
"CaptureTime": {
"-xsi:nil": "true"
},
"PaymentIsCancelled": "false",
"CancelTime": {
"-xsi:nil": "true"
},
"CreatedTime": "2018-11-06T15:00:00Z",
"ChangedTime": "2019-05-06T12:45:30Z",
"SyncedTime": {
"-xsi:nil": "true"
}
},
{
"-xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"-href": "/__API__/order/2",
"-order_id": "2",
"OrderNo": "2",
"ErpOrderNo": {
"-xsi:nil": "true"
},
"Customer": {
"-href": "/__API__/customer/42",
"#text": "1"
},
"State": "DENIED",
"PaymentState": {
"-xsi:nil": "true"
},
"PaymentIsCaptured": "false",
"CaptureTime": {
"-xsi:nil": "true"
},
"PaymentIsCancelled": "false",
"CancelTime": {
"-xsi:nil": "true"
},
"CreatedTime": "2018-11-06T15:49:47Z",
"ChangedTime": "2019-05-06T12:45:30Z",
"SyncedTime": {
"-xsi:nil": "true"
}
}
]
}
}
Объект в C# был создан следующим образом:
public class Rootobject
{
public Orderlist OrderList { get; set; }
}
public class Orderlist
{
public List<Order> Order { get; set; }
}
public class Order
{
public string xmlnsxsi { get; set; }
public string href { get; set; }
public string order_id { get; set; }
public string OrderNo { get; set; }
public Erporderno ErpOrderNo { get; set; }
public Customer Customer { get; set; }
public string State { get; set; }
public object PaymentState { get; set; }
public string PaymentIsCaptured { get; set; }
public object CaptureTime { get; set; }
public string PaymentIsCancelled { get; set; }
public object CancelTime { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime ChangedTime { get; set; }
public Syncedtime SyncedTime { get; set; }
}
public class Erporderno
{
public string xsinil { get; set; }
}
public class Customer
{
public string href { get; set; }
public string text { get; set; }
}
public class Syncedtime
{
public string xsinil { get; set; }
}
До сих пор я пытался десериализовать это следующим образом.
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlanswer);
string json = JsonConvert.SerializeXmlNode(doc);
var fromJson = JsonConvert.DeserializeObject<Rootobject>(json);
Объект OrderList заполняется списком из 300+ заказов. Но внутри объекта заказа он перестает работать. Объект Customer не сериализуется, как и ErpOrderNr. И я не могу понять, почему. Я прочитал много сообщений, но не нашел решения.
Есть идеи?