mridulkoul123 Ответов: 2

В C# разобрать объект JSON от URL в объекты DataTable


Я пытаюсь разобрать многослойный json из url, а затем разобранный JSON rootobject в datatables для команды insert и update в c#.
Безусловно, это вставка значений в базу данных, но мне нужно, чтобы этот приведенный ниже код сначала был преобразован в datatable
<pre>var table = JsonConvert.DeserializeObject<RootObject>(json);


Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication3.Models
{
    public class Customer
    {
    }

    public class Meta
    {
        public string type { get; set; }
        public string date { get; set; }
        public string schemaUrl { get; set; }
    }

    public class BillingContact
    {
        public string language { get; set; }
        public string languageId { get; set; }
        public string locale { get; set; }
        public string company { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string companyRomanized { get; set; }
        public string firstnameRomanized { get; set; }
        public string lastnameRomanized { get; set; }
        public string street1 { get; set; }
        public string street2 { get; set; }
        public string postalcode { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string stateId { get; set; }
        public string stateIsoCode { get; set; }
        public string country { get; set; }
        public string countryId { get; set; }
        public string email { get; set; }
    }

    public class DeliveryContact
    {
        public string language { get; set; }
        public string languageId { get; set; }
        public string locale { get; set; }
        public string company { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string companyRomanized { get; set; }
        public string firstnameRomanized { get; set; }
        public string lastnameRomanized { get; set; }
        public string street1 { get; set; }
        public string street2 { get; set; }
        public string postalcode { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string stateId { get; set; }
        public string stateIsoCode { get; set; }
        public string country { get; set; }
        public string countryId { get; set; }
        public string email { get; set; }
    }

    public class LicenseeContact
    {
        public string language { get; set; }
        public string languageId { get; set; }
        public string locale { get; set; }
        public string company { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string companyRomanized { get; set; }
        public string firstnameRomanized { get; set; }
        public string lastnameRomanized { get; set; }
        public string street1 { get; set; }
        public string street2 { get; set; }
        public string postalcode { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string stateId { get; set; }
        public string stateIsoCode { get; set; }
        public string country { get; set; }
        public string countryId { get; set; }
        public string email { get; set; }
    }

    public class PaymentInfo
    {
        public string currency { get; set; }
        public string currencyId { get; set; }
        public string paymentType { get; set; }
        public string paymentTypeId { get; set; }
        public bool isPurchaseOrder { get; set; }
    }

    public class ProfitCalculation
    {
        public double grossRevenue { get; set; }
        public double collectedVat { get; set; }
        public double netRevenue { get; set; }
        public double cbMarginPercentage { get; set; }
        public double cbMarginFix { get; set; }
        public double yourNetProfit { get; set; }
        public double yourVat { get; set; }
        public double yourGrossProfit { get; set; }
    }

    public class ProductSinglePrice
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class ProductTotalPrice
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class TotalSinglePrice
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class TotalTotalPrice
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class YourPrice
    {
        public ProductSinglePrice productSinglePrice { get; set; }
        public ProductTotalPrice productTotalPrice { get; set; }
        public TotalSinglePrice totalSinglePrice { get; set; }
        public TotalTotalPrice totalTotalPrice { get; set; }
    }

    public class ProductSinglePrice2
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class ProductTotalPrice2
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class TotalSinglePrice2
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class TotalTotalPrice2
    {
        public double netPrice { get; set; }
        public double vatPrice { get; set; }
        public double grossPrice { get; set; }
        public double vatPercentage { get; set; }
    }

    public class CustomerPrice
    {
        public ProductSinglePrice2 productSinglePrice { get; set; }
        public ProductTotalPrice2 productTotalPrice { get; set; }
        public TotalSinglePrice2 totalSinglePrice { get; set; }
        public TotalTotalPrice2 totalTotalPrice { get; set; }
    }

    public class Service
    {
        public string deliveryType { get; set; }
        public string deliveryTypeId { get; set; }
    }

    public class Delivery
    {
        public Service service { get; set; }
    }

    public class NextBillingProfit
    {
        public double grossRevenue { get; set; }
        public double collectedVat { get; set; }
        public double netRevenue { get; set; }
        public double cbMarginPercentage { get; set; }
        public double cbMarginFix { get; set; }
        public double yourNetProfit { get; set; }
        public double yourVat { get; set; }
        public double yourGrossProfit { get; set; }
    }

    public class RecurringBilling
    {
        public string subscriptionId { get; set; }
        public string subscriptionEventtypeId { get; set; }
        public int originalPurchaseId { get; set; }
        public int originalPurchaseItemRunningNumber { get; set; }
        public int intervalNumber { get; set; }
        public int gracePeriodDays { get; set; }
        public string statusId { get; set; }
        public string status { get; set; }
        public string itemStatusId { get; set; }
        public string itemStatus { get; set; }
        public string nextBillingDate { get; set; }
        public string cancellationUrl { get; set; }
        public string changePaymentSubscriptionUrl { get; set; }
        public NextBillingProfit nextBillingProfit { get; set; }
    }

    public class Item
    {
        public int runningNumber { get; set; }
        public int productId { get; set; }
        public string productName { get; set; }
        public string yourProductId { get; set; }
        public string yourProductName { get; set; }
        public string internalCategory { get; set; }
        public int supportContactId { get; set; }
        public string supportContact { get; set; }
        public int clientId { get; set; }
        public int quantity { get; set; }
        public string yourCurrency { get; set; }
        public string yourCurrencyId { get; set; }
        public ProfitCalculation profitCalculation { get; set; }
        public YourPrice yourPrice { get; set; }
        public CustomerPrice customerPrice { get; set; }
        public List<Delivery> deliveries { get; set; }
        public RecurringBilling recurringBilling { get; set; }
    }

    public class ExtraParameters
    {
    }

    public class RootObject
    {
        public Meta meta { get; set; }
        public int purchaseId { get; set; }
        public string status { get; set; }
        public string statusId { get; set; }
        public BillingContact billingContact { get; set; }
        public DeliveryContact deliveryContact { get; set; }
        public LicenseeContact licenseeContact { get; set; }
        public PaymentInfo paymentInfo { get; set; }
        public string creationTime { get; set; }
        public string paymentArriveTime { get; set; }
        public string lastModificationTime { get; set; }
        public string subscriptionRevenueCategoryId { get; set; }
        public string remoteAddress { get; set; }
        public string remoteHost { get; set; }
        public string httpUserAgent { get; set; }
        public string httpEntryUrl { get; set; }
        public string httpReferer { get; set; }
        public string httpAcceptLanguage { get; set; }
        public string internalCustomer { get; set; }
        public string customerConfirmationPageUrl { get; set; }
        public string customerPdfDocumentUrl { get; set; }
        public string merchantOfRecord { get; set; }
        public List<Item> items { get; set; }
        public ExtraParameters extraParameters { get; set; }
    }
}



<pre>I done it like this...its insering values in database...but not through datatable...can anyone share some code or procedure?
<pre> public void customerjson()
 {
            string url = @"https://api.myjson.com/bins/yxi3x";

            using (WebClient client = new WebClient())
            {
                string json = client.DownloadString(url);
                var table = JsonConvert.DeserializeObject<RootObject>(json);
            

            string sql = "";
            SqlConnection _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnStringDb"].ToString());

            sql = sql + "insert into ContactDetails (language, languageId, locale, company, firstname, lastname, companyRomanized, firstnameRomanized, lastnameRomanized, street1, street2, postalcode, city, state, stateId, stateIsoCode, country, countryId, email) values('"
                 + table.billingContact.language.ToString() + "','"
                 + table.billingContact.languageId.ToString() + "','"
                 + table.billingContact.locale.ToString() + "','"
                 + table.billingContact.company.ToString() + "','"
                 + table.billingContact.firstname.ToString() + "','"
                 + table.billingContact.lastname.ToString() + "','"
                 + table.billingContact.companyRomanized.ToString() + "','"
                 + table.billingContact.firstnameRomanized.ToString() + "','"
                 + table.billingContact.lastnameRomanized.ToString() + "','"
                 + table.billingContact.street1.ToString() + "','"
                 + table.billingContact.street2.ToString() + "','"
                 + table.billingContact.postalcode.ToString() + "','"
                 + table.billingContact.city.ToString() + "','"
                 + table.billingContact.state.ToString() + "','"
                 + table.billingContact.stateId.ToString() + "','"
                 + table.billingContact.stateIsoCode.ToString() + "','"
                 + table.billingContact.country.ToString() + "','"
                 + table.billingContact.countryId.ToString() + "','"
                 + table.billingContact.email.ToString() + "')";

            SqlCommand cmd = new SqlCommand(sql, _connection);
            _connection.Open();
            cmd.ExecuteNonQuery();
            _connection.Close();
            }
        }

Graeme_Grant

Какие у тебя проблемы? Пожалуйста, будьте конкретны.

mridulkoul123

я хочу преобразовать это
RootObject rt = JsonConvert.DeserializeObject< rootobject> (getTestObjects (). Result);
в датируемый.
е.г:
Объект DataTable таблица = РТ.billingContact;

F-ES Sitecore

Гугл "C# для преобразования объекта в объект DataTable". Это зависит от того, что вы хотите сделать с этим datatable, хотя, возможно, есть и лучшие решения.

2 Ответов

Рейтинг:
2

BillWoodruff

Сообщение об ошибке очень ясно: RootObject< DataTable & gt; вызывает ошибку, потому что ' RootObject is не универсальный тип.

Вам нужно сначала узнать свой результат в формате JSON (строка), а затем использовать Newtonsoft.В формате JSON.Конвертеры.DataTableConverter первоклассных услуг, чтобы преобразовать его в объект DataTable [^].

При создании производственного кода важно ознакомиться с возможностями и методами этой библиотеки. И, возможно, ограничения:

Цитата:
Встроенный DataTable не сериализует информацию о столбцах, он должен вывести тип столбца из данных. Я создал здесь улучшенный конвертер [^]


Graeme_Grant

Я этого не знал, так как работаю в основном в WPF/Xamarin/UWP... +5 :)

Рейтинг:
1

Graeme_Grant

Если у вас возникли проблемы с преобразованием необработанного JSON, то передайте необработанные данные JSON в JSON Utils: генерация C#, VB.Net, SQL Table, Java и PHP из JSON[^] и он будет генерировать файлы класса C# для вас.

DataTable - это "плоский вид", и ваши данные не являются плоскими, они имеют несколько слоев. Если вы все еще хотите использовать DataTable, вам нужно будет перевести структуру класса в один объект класса.

Это будет большим подспорьем для вас: DataTable Class-документация Microsoft[^]


BillWoodruff

+5 Этот сайт онлайн-конверсии-отличный ресурс !

Graeme_Grant

:)

Karthik_Mahalingam

5 для ссылки

Graeme_Grant

Спасибо! Это отличный ресурс для ОП...