,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.
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;
}
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çinpublic 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);
}
}
}
}
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();
}
}
JsonConvert.SerializeObject(dataTable) ile DataTable'ı JSON string'ine çevirirsiniz. Bu, POST gövdesindeki ham (raw) veridir.
StringContent sınıfını kullanarak bu JSON string'ini HttpClient için bir içerik nesnesine dönüştürür ve mediaType'ı application/json olarak ayarlarsınız.
HttpClient.PostAsync() metodunu çağırarak veriyi başarıyla göndermiş olursunuz.
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
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);
}
}
}
}
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.