Похоже, здесь есть несколько вопросов, я постараюсь их проработать:
Модели данных и десериализация
Что касается создания единой структуры из вашего ответа API , Я бы рекомендовал использовать библиотеки Newtonsoft. Json, доступные на NuGet Json. NET. Они позволят вам десериализовать ответ от вашего API в один объект, который, учитывая предоставленный вами образец, должен содержать коллекцию каждой из ваших моделей, Order
, PaymentDetail
, CouponUsageDetail
:
public class APIResponceContainer
{
[JsonProperty("Orders")]
public List<Order> Orders { get; set; }
[JsonProperty("PaymentDetails")]
public List<PaymentDetail> PaymentDetails { get; set; }
[JsonProperty("CouponUsageDetails")]
public List<CouponUsageDetail> CouponUsageDetails { get; set; }
public APIResponceContainer()
{
Orders = new List<Order>();
PaymentDetails = new List<PaymentDetail>();
CouponUsageDetails = new List<CouponUsageDetail>();
}
}
Не забывайте добавлять обязательные атрибуты к каждой из ваших моделей следующим образом:
public class Order
{
[JsonProperty("ProductId")]
public int ProductId { get; set; }
[JsonProperty("CustomerId")]
public int CustomerId { get; set; }
[JsonProperty("OrderId")]
public int OrderId { get; set; }
}
Затем десериализация происходит из вашей JSON строки, как таковой:
StringReader stringReader = new StringReader(myJSONString);
JsonSerializer js = JsonSerializer.Create();
APIResponceContainer APIResponce = (APIResponceContainer)js.Deserialize(stringReader, typeof(APIResponceContainer));
Запросы
Как обсуждалось в комментариях, ваши данные, к сожалению, очень нуждаются в нормализации. Однако я сделал вывод, что вы хотели бы создать плоскую структуру, сохраняя «несколько других свойств» и «ключевые свойства» для комбинации Order
, PaymentDetail
и CouponUsageDetail
. Вы можете использовать Linq
для этого, что важно, я бы рекомендовал вам выбрать себе «Первичный ключ». Другими словами, одно свойство, которое может независимо ie всех остальных вместе. В приведенном ниже примере я выбрал OrderID
, поскольку он должен быть уникальным (?):
var flatSequence =
from order in APIResponce.Orders
join coupon in APIResponce.CouponUsageDetails on order.OrderId equals coupon.OrderId
join payment in APIResponce.PaymentDetails on order.OrderId equals payment.OrderId
select new
{
// Here extract all the properties you care about
OrderID = order.OrderId,
Customer = order.CustomerId,
Product = order.ProductId,
// All the "other Properties" ?
BankDetail = payment.PaymentOnlyProperty
};
Здесь я извлек в var
, однако, если вы знаете окончательную плоскую структуру, которую хотите, конечно, определите свой класс, чтобы получить результат.
Прокомментируйте, если есть какие-либо вопросы.