csharp da datatable datasını raw olarak dönüştürüp post etmek

c# da datatable datasını raw olarak dönüştürüp post etmek

,Bu işlem için genellikle en popüler C# JSON kütüphanesi olan Newtonsoft.Json (Json.NET) kullanılır. Projenize bu paketi NuGet üzerinden eklediğinizden emin olun.

Adım 1: DataTable'ı JSON'a Çevirme

Newtonsoft.Json kütüphanesi, DataTable nesnesini doğrudan JSON formatına dönüştürme yeteneğine sahiptir.

using Newtonsoft.Json;
using System.Data;

public string DataTableToJson(DataTable dataTable)
{
    // DataTable'ı bir JSON string'ine dönüştürür.
    // Bu JSON, POST isteğinin 'raw' gövdesini oluşturacaktır.
    string jsonString = JsonConvert.SerializeObject(dataTable);
    return jsonString;
}

Adım 2: JSON Verisini HTTP POST İle Gönderme

Oluşturduğumuz JSON string'ini hedef API'ye POST etmek için HttpClient sınıfını kullanacağız. HttpClient kullanırken, gönderdiğimiz verinin tipini belirtmek (Content-Type) önemlidir; bu, genellikle application/json olmalıdır.

 

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Data; // DataTable için
using Newtonsoft.Json; // JSON serileştirme için

public class DataSender
{
    // Kullanılacak API adresi
    private const string ApiUrl = "https://sizin-api-adresiniz.com/api/kaydet";

    public async Task SendDataTableAsRawJson(DataTable dataTable)
    {
        // 1. DataTable'ı JSON'a dönüştür
        string jsonPayload = JsonConvert.SerializeObject(dataTable);

        // 2. HttpClient nesnesini oluştur
        using (var client = new HttpClient())
        {
            // 3. JSON verisini HTTP içeriği olarak hazırla
            // Content-Type: application/json olarak ayarlanır ve UTF8 Encoding kullanılır
            var httpContent = new StringContent(
                content: jsonPayload,
                encoding: Encoding.UTF8,
                mediaType: "application/json"
            );

            try
            {
                // 4. POST isteğini gönder
                HttpResponseMessage response = await client.PostAsync(ApiUrl, httpContent);

                // 5. Cevabı kontrol et
                if (response.IsSuccessStatusCode)
                {
                    string responseContent = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Veri başarıyla gönderildi. Cevap: " + responseContent);
                }
                else
                {
                    Console.WriteLine($"Hata oluştu: {response.StatusCode} - {response.ReasonPhrase}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("İstek gönderilirken bir istisna oluştu: " + ex.Message);
            }
        }
    }
}

 

Örnek Kullanım (Tam Kod)

Aşağıdaki örnek, bir DataTable oluşturur ve ardından bu veriyi yukarıdaki metotla API'ye gönderme işlemini simüle eder:

using System;
using System.Data;
using System.Threading.Tasks;

// DataSender sınıfı yukarıdaki gibi tanımlanmış olmalıdır.

class Program
{
    static async Task Main(string[] args)
    {
        // 1. Örnek bir DataTable oluşturma
        DataTable urunlerDt = new DataTable("Urunler");
        urunlerDt.Columns.Add("UrunID", typeof(int));
        urunlerDt.Columns.Add("Ad", typeof(string));
        urunlerDt.Columns.Add("Fiyat", typeof(decimal));
        
        urunlerDt.Rows.Add(101, "POS PC", 12500.50m);
        urunlerDt.Rows.Add(102, "Barkod Okuyucu", 850.00m);
        
        // 2. Veriyi gönderen metodu çağırma
        var sender = new DataSender();
        await sender.SendDataTableAsRawJson(urunlerDt);
        
        Console.ReadKey();
    }
}

 

Özetle

  1. JsonConvert.SerializeObject(dataTable) ile DataTable'ı JSON string'ine çevirirsiniz. Bu, POST gövdesindeki ham (raw) veridir.

  2. StringContent sınıfını kullanarak bu JSON string'ini HttpClient için bir içerik nesnesine dönüştürür ve mediaTypeapplication/json olarak ayarlarsınız.

  3. HttpClient.PostAsync() metodunu çağırarak veriyi başarıyla göndermiş olursunuz.

 


 

 ayrıca projenizde   .NET Framework 4.0 kullanıyorsa, async/await ve modern HttpClient sınıfının asenkron metotları uygun olmayacaktır.

Bu durumda, işlemi senkron (eşzamanlı) olarak gerçekleştiren ve .NET 4.0 ile tamamen uyumlu olan WebClient sınıfını kullanmalıyız.

 

DataTable'ı JSON'a dönüştürüp, bekleme (await) olmaksızın senkron olarak POST eden C# kodu

1. WebClient ile Senkron POST Metodu

Bu çözümde yine Newtonsoft.Json (Json.NET) kütüphanesini kullanacağız, bu kütüphane .NET 4.0 ile uyumludur.

using Newtonsoft.Json;
using System.Data;
using System.Net;
using System.Text;
using System;

public class DataSender
{
    // Kullanılacak API adresi
    private const string ApiUrl = "https://sizin-api-adresiniz.com/api/kaydet";

    // .NET 4.0 uyumlu, senkron (await içermeyen) metod
    public void SendDataTableAsRawJsonSync(DataTable dataTable)
    {
        // 1. DataTable'ı JSON'a dönüştür (Raw Payload)
        string jsonPayload = JsonConvert.SerializeObject(dataTable);

        // 2. WebClient nesnesini oluştur
        using (WebClient client = new WebClient())
        {
            try
            {
                // 3. İsteğin Content-Type (İçerik Tipi) başlığını ayarla
                client.Headers.Add("Content-Type", "application/json");
                // Gerekirse Encoding'i ayarla (genellikle UTF-8)
                client.Encoding = Encoding.UTF8;

                // 4. JSON verisini senkron olarak POST et
                // UploadString metodu veriyi gönderir ve sunucudan gelen cevabı string olarak döndürür.
                string responseString = client.UploadString(ApiUrl, "POST", jsonPayload);
                
                Console.WriteLine("Veri başarıyla gönderildi. Cevap: " + responseString);
            }
            catch (WebException webEx)
            {
                // API veya ağ ile ilgili hataları yakalar
                Console.WriteLine("Web İsteği Hatası Oluştu: " + webEx.Message);

                // Sunucudan gelen hata mesajını (örneğin 400 Bad Request) görmek için
                if (webEx.Response != null)
                {
                    using (var reader = new System.IO.StreamReader(webEx.Response.GetResponseStream()))
                    {
                        string errorResponse = reader.ReadToEnd();
                        Console.WriteLine("Sunucu Hata Detayı: " + errorResponse);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Genel İstisna Oluştu: " + ex.Message);
            }
        }
    }
}

 

2. Örnek Kullanım (Senkron Çalıştırma)

class Program
{
    static void Main(string[] args)
    {
        // 1. Örnek bir DataTable oluşturma
        DataTable urunlerDt = new DataTable("Urunler");
        urunlerDt.Columns.Add("UrunID", typeof(int));
        urunlerDt.Columns.Add("Ad", typeof(string));
        urunlerDt.Columns.Add("Fiyat", typeof(decimal));
        
        urunlerDt.Rows.Add(101, "POS PC", 12500.50m);
        urunlerDt.Rows.Add(102, "Barkod Okuyucu", 850.00m);
        
        // 2. Veriyi senkron olarak gönderen metodu çağırma
        DataSender sender = new DataSender();
        sender.SendDataTableAsRawJsonSync(urunlerDt);
        
        Console.ReadKey();
    }
}

Bu kod, .NET Framework 4.0 ortamında güvenle çalışır ve DataTable verinizi herhangi bir async/await bağımlılığı olmadan bir API'ye JSON (raw) formatında POST etmenizi sağlar.