c# xml ve json web servis veri alma
Merhaba
Bugün daha önce yazdığım c# xml ve json web servis konusu ile hazırladığımız servisi kullanarak veri alama işlemini yapacağız. Bu işlem için öncelikle bir Console uygulaması hazırlayalım ve daha önce oluşturuduğumuz servisi bu proje içine referans olarak ekleyelim. Visual Studio içinde “File > New > Project > Visual C# > Windows > Console Application” seçimi ile uygulamamızı hazırlayalım. Daha sonra ise proje üzerinde References üzerinde sağ tık ile açılan menüden Add Service Reference ile bir önceki makalede hazırladığımız servisimizi ekleyelim. Daha önce hazırladığımız servisimizi localhsot üzerinde çalıştırıp adresini aldıktan sonra servis referansa ” http://localhost:57654/JSONandXML.asmx?wsdl “ olarak ekliyoruz ve servis referans adı olarak da “JSONandXMLCs” değerini veriyoruz. Daha sonra yine references alanında yine sağ tık ile add reference diyoruz ve JSON web servisi parse edebilmek için gerekli olan System.Web.Extensions dll ini ekliyoruz. Artık programımızda servislerden veri alacak kodlarımızı yazalım. İlk olarak JSON parse işelminde ihtiyacımız olan Member.cs class ımızı oluşturalım.
[Member.cs]
namespace CallJSONandXMLCs { public class Member { public int Id { get; set; } public string Name { get; set; } public int Salary { get; set; } public string Position { get; set; } } }
Member class ımız hazır olduğuna göre artık kodlarımız tamamlayalım.
[Program.cs]
using System; using System.Collections.Generic; using System.Web.Script.Serialization; namespace CallJSONandXMLCs { class Program { static void Main(string[] args) { JSONandXMLCs.JSONandXMLSoapClient xmlClient = new JSONandXMLCs.JSONandXMLSoapClient(); var teamFromXML = xmlClient.GetTeamFromXML(); Console.WriteLine("XML'den gelen sonuçlar:"); foreach (var item in teamFromXML) { Console.WriteLine(item.Id + " " + item.Name + " " + item.Position + " " + item.Salary); } Console.WriteLine(); JSONandXMLCs.JSONandXMLSoapClient jsonClient = new JSONandXMLCs.JSONandXMLSoapClient(); var teamFromJSON = jsonClient.GetTeamFromJSON(); JavaScriptSerializer jss = new JavaScriptSerializer(); List<Member> members = new List<Member>(); members = jss.Deserialize<List<Member>>(teamFromJSON); Console.WriteLine("JSON'dan gelen sonuçlar:"); foreach (var item in members) { Console.WriteLine(item.Id + " " + item.Name + " " + item.Position + " " + item.Salary); } Console.ReadKey(); } } }
Yukarıdaki kodlarda da görüldüğü gibi hem XML’den hemde JSON’dan gelen sonuçları çıktı olarak console üzerine yazdırık. Kodlarda özellikle farklı client oluşturdum xmlClient ve jsonClient şekilinde , bu sebeple iki servis için yazılan kodları ayrı ayrı okumak kolay ve anlaşılır olabilir. Yukarıdaki kodlar çalıştığında çıktı aşağıdaki gibi olacaktır.
XML'den gelen sonuçlar: 1 Samet Software Specialist 10000 2 Kubilay Software Specialist 10000 3 Erkan Software Specialist 10000 JSON'dan gelen sonuçlar: 1 Samet Software Specialist 10000 2 Kubilay Software Specialist 10000 3 Erkan Software Specialist 10000
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb xml ve json web servis
Merhaba
Bugün Vb ile XML ve JSON web servis hazırlamaya bakacağız. Bir web servis hazırlayıp bu servis ile bir takım içindeki çalışanların id, adı, maaşı ve pozisyonu bilgilerini hem xml hem de json olarak nasıl alabilceğimize bakacağız. Bu işlem için önce bir proje açalım. Visual Studio içinde “File > New > Project > Visual Basic > Windows > Web > ASP.NET Web Application” seçiminden sonra ekrana gelen seçimlerden “Empty” seçimi ile projemizi oluşturalım. Proje oluştuktan sonra proje üzerinde sağ tık ile “Add > Web Service(ASMX)” seçimi ile servisimizi ekleyelim. Artık proje için herşey hazır olduğuna göre şimdi servis içinde kullanacağımız class larımızı hazırlayalım. İlk olarak takım üyelerinin bilgilerinin oldugu “Member” classını ve sonrasında da “Team” classını oluşturualım.
[Member.vb]
Public Class Member Private m_Id As Integer Public Property Id() As Integer Get Return m_Id End Get Set m_Id = Value End Set End Property Private m_Name As String Public Property Name() As String Get Return m_Name End Get Set m_Name = Value End Set End Property Private m_Salary As Integer Public Property Salary() As Integer Get Return m_Salary End Get Set m_Salary = Value End Set End Property Private m_Position As String Public Property Position() As String Get Return m_Position End Get Set m_Position = Value End Set End Property End Class
[Team.vb]
Public Class Team Public Function GetTeamMembers() As Member() Dim teamMembers As Member() = New Member() { New Member() With {.Id = 1, .Name = "Samet", .Salary = 10000, .Position = "Software Specialist"}, New Member() With {.Id = 2, .Name = "Kubilay", .Salary = 10000, .Position = "Software Specialist"}, New Member() With {.Id = 3, .Name = "Erkan", .Salary = 10000, .Position = "Software Specialist"}} Return teamMembers End Function End Class
İşlem yapacağımız classlarımız artık hazır şimdi bu classları kullanacağımız servisimizin içeriğini hazırlayalım. Servisimizin içinde iki adet metodumuz olacak, birisi XML olarak diğeride aynı veriyi JSON olarak bize verecek. Metodlarımız GetTeamFromXML ve GetTeamFromJSON olacak.
[JSONandXML.asmx.vb]
Imports System.ComponentModel Imports System.Web.Script.Serialization Imports System.Web.Script.Services Imports System.Web.Services ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. ' <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://sametcelikbicak.com/")> <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <ToolboxItem(False)> _ Public Class JSONandXML Inherits System.Web.Services.WebService <WebMethod> Public Function GetTeamFromXML() As Member() Dim team As New Team() Return team.GetTeamMembers() End Function <WebMethod> <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> Public Function GetTeamFromJSON() As String Dim team As New Team() Return New JavaScriptSerializer().Serialize(team.GetTeamMembers()) End Function End Class
Artık herşey kullanıma hazır şimdi projeyi çalıştırıp servisin çalışmasını ve dönen değerlere bakalım. Servis çalıştığında aşağıdaki gibi görünecektir.
İlk olarak alıştığımız gibi XML metodunu çağırdık ve gelen sonuç aşağıdaki gibidir.
[GetTeamFromXML]
<?xml version="1.0" encoding="UTF-8"?> <ArrayOfMember xmlns="http://sametcelikbicak.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Member> <Id>1</Id> <Name>Samet</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>2</Id> <Name>Kubilay</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>3</Id> <Name>Erkan</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> </ArrayOfMember>
Şimdide aynı verilere sahip sonuçları bize veren JSON metodunu çağıralım ve sonuçlarına bakalım.
[GetTeamFromJSON]
<?xml version="1.0" encoding="UTF-8"?> <string xmlns="http://sametcelikbicak.com/">[{"Id":1,"Name":"Samet","Salary":10000,"Position":"Software Specialist"},{"Id":2,"Name":"Kubilay","Salary":10000,"Position":"Software Specialist"},{"Id":3,"Name":"Erkan","Salary":10000,"Position":"Software Specialist"}]</string>
Artık bir web servis ile hem xml hemde json olarak verileri alabiliyoruz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
c# xml ve json web servis
Merhaba
Bugün C# ile XML ve JSON web servis hazırlamaya bakacağız. Bir web servis hazırlayıp bu servis ile bir takım içindeki çalışanların id, adı, maaşı ve pozisyonu bilgilerini hem xml hem de json olarak nasıl alabilceğimize bakacağız. Bu işlem için önce bir proje açalım. Visual Studio içinde “File > New > Project > Visual C# > Windows > Web > ASP.NET Web Application” seçiminden sonra ekrana gelen seçimlerden “Empty” seçimi ile projemizi oluşturalım. Proje oluştuktan sonra proje üzerinde sağ tık ile “Add > Web Service(ASMX)” seçimi ile servisimizi ekleyelim. Artık proje için herşey hazır olduğuna göre şimdi servis içinde kullanacağımız class larımızı hazırlayalım. İlk olarak takım üyelerinin bilgilerinin oldugu “Member” classını ve sonrasında da “Team” classını oluşturualım.
[Member.cs]
namespace JSONandXMLCs { public class Member { public int Id { get; set; } public string Name { get; set; } public int Salary { get; set; } public string Position { get; set; } } }
[Team.cs]
namespace JSONandXMLCs { public class Team { public Member[] GetTeamMembers() { Member[] teamMembers = new Member[] { new Member() { Id=1,Name="Samet",Salary=10000,Position="Software Specialist"}, new Member() { Id=2,Name="Kubilay",Salary=10000,Position="Software Specialist"}, new Member() { Id=3,Name="Erkan",Salary=10000,Position="Software Specialist"}, }; return teamMembers; } } }
İşlem yapacağımız classlarımız artık hazır şimdi bu classları kullanacağımız servisimizin içeriğini hazırlayalım. Servisimizin içinde iki adet metodumuz olacak, birisi XML olarak diğeride aynı veriyi JSON olarak bize verecek. Metodlarımız GetTeamFromXML ve GetTeamFromJSON olacak.
[JSONandXML.asmx.cs]
using System.Web.Services; using System.Web.Script.Services; using System.Web.Script.Serialization; namespace JSONandXMLCs { [WebService(Namespace = "http://sametcelikbicak.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] public class JSONandXML : System.Web.Services.WebService { [WebMethod] public Member[] GetTeamFromXML() { Team team = new Team(); return team.GetTeamMembers(); } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string GetTeamFromJSON() { Team team = new Team(); return new JavaScriptSerializer().Serialize(team.GetTeamMembers()); } } }
Artık herşey kullanıma hazır şimdi projeyi çalıştırıp servisin çalışmasını ve dönen değerlere bakalım. Servis çalıştığında aşağıdaki gibi görünecektir.
İlk olarak alıştığımız gibi XML metodunu çağırdık ve gelen sonuç aşağıdaki gibidir.
[GetTeamFromXML]
<?xml version="1.0" encoding="UTF-8"?> <ArrayOfMember xmlns="http://sametcelikbicak.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Member> <Id>1</Id> <Name>Samet</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>2</Id> <Name>Kubilay</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> <Member> <Id>3</Id> <Name>Erkan</Name> <Salary>10000</Salary> <Position>Software Specialist</Position> </Member> </ArrayOfMember>
Şimdide aynı verilere sahip sonuçları bize veren JSON metodunu çağıralım ve sonuçlarına bakalım.
[GetTeamFromJSON]
<?xml version="1.0" encoding="UTF-8"?> <string xmlns="http://sametcelikbicak.com/">[{"Id":1,"Name":"Samet","Salary":10000,"Position":"Software Specialist"},{"Id":2,"Name":"Kubilay","Salary":10000,"Position":"Software Specialist"},{"Id":3,"Name":"Erkan","Salary":10000,"Position":"Software Specialist"}]</string>
Artık bir web servis ile hem xml hemde json olarak verileri alabiliyoruz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb universal app hello world
Merhaba
Bugün Universal App olarak bir Hello World uygulamamızı hazırlayacağız. Bildiğiniz gibi universal app her platformda çalışıyor(desktop,web, mobile ve Microsoft’un desteği olan her yerde xbox gibi). Bizde bugün sabit bir uygulama hazırlayalım. Öncelikli olarak projemizi oluşturalım ve bunun için Visual Studio da sırası ile File > New > Project > Installed > Templates > Visual Basic > Windows > Universal adımlarını takip edip, gelen ekrandan da Blank App(Universal Windows) seçeneği ile projemizi oluşturuyoruz. Oluşturduğumuz projenin örnek kodları aşağıdaki gibi olacaktır.
Uygulamamızın dizaynını yaptığımız MainPage.xaml içeriği.
[MainPage.xaml]
<Page x:Class="UniversalAppVb.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UniversalAppVb" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBox x:Name="txtHelloWorld" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="Hello World" VerticalAlignment="Top" Height="178" Width="340" FontSize="30" TextAlignment="Center"/> <Button x:Name="btnHelloWorld" Content="Hello World" HorizontalAlignment="Left" Margin="10,355,0,0" VerticalAlignment="Top" Height="51" Width="340" FontSize="30" Click="btnHelloWorld_Click"/> </Grid> </Page>
Dizayn ettiğimiz uygulamamızın kontrolleriniz yazdığımız MainPage.xaml.vb içeriği
[MainPage.xaml.vb]
' The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 Imports Windows.UI.Popups ''' <summary> ''' An empty page that can be used on its own or navigated to within a Frame. ''' </summary> Public NotInheritable Class MainPage Inherits Page Private Async Sub btnHelloWorld_Click(sender As Object, e As RoutedEventArgs) txtHelloWorld.Text = "Windows Universal App, Hello World." Dim message As MessageDialog = New MessageDialog("Windows Universal App with Vb, Like it ? ") message.Title = "Hello World" message.Commands.Add(New UICommand("Yes")) message.Commands.Add(New UICommand("No")) Dim result = Await message.ShowAsync() If result.Label = "Yes" Then Dim msg As MessageDialog = New MessageDialog("Thank you very much :) ") msg.Title = "Thanks" msg.Commands.Add(New UICommand("Ok")) Await msg.ShowAsync() End If End Sub End Class
Burada basit olarak bir ekran hazırladık ve içinde butona bastığımızda değişen bir mesaj ekleyip sonrasında ise kullanıcıya mesaj verip işlemi kontrol etmesini sağladık. Uygulama çalıştığında aşağıdaki gibi ekran görüntülerindeki gibi olacaktır.
Burada dikkat etmemiz gereken bir konu var. Eğer işletim sisteminizde geliştirici seçenekleri aktif değil ise uygulamayı dizayn ederken uyarı alırız. Bu özelliği aktif etmek için Başlat > Ayarlar > Güncelleştirme ve güvenlik > Geliştiriciler için sekmesi altından Geliştirici modu seçeneğini aktif etmeliyiz. Bu ayarlamayı yaptıktan sonra ise uygulamamızı dizayn edip çalıştırabiliriz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
c# universal app hello world
Merhaba
Bugün Universal App olarak bir Hello World uygulamamızı hazırlayacağız. Bildiğiniz gibi universal app her platformda çalışıyor(desktop,web, mobile ve Microsoft’un desteği olan her yerde xbox gibi). Bizde bugün sabit bir uygulama hazırlayalım. Öncelikli olarak projemizi oluşturalım ve bunun için Visual Studio da sırası ile File > New > Project > Installed > Templates > Visual C# > Windows > Universal adımlarını takip edip, gelen ekrandan da Blank App(Universal Windows) seçeneği ile projemizi oluşturuyoruz. Oluşturduğumuz projenin örnek kodları aşağıdaki gibi olacaktır.
Uygulamamızın dizaynını yaptığımız MainPage.xaml içeriği.
[MainPage.xaml]
<Page x:Class="UniversalAppCs.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:UniversalAppCs" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <TextBox x:Name="txtHelloWorld" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="Hello World" VerticalAlignment="Top" Height="178" Width="340" FontSize="30" TextAlignment="Center"/> <Button x:Name="btnHelloWorld" Content="Hello World" HorizontalAlignment="Left" Margin="10,355,0,0" VerticalAlignment="Top" Height="51" Width="340" FontSize="30" Click="btnHelloWorld_Click"/> </Grid> </Page>
Dizayn ettiğimiz uygulamamızın kontrolleriniz yazdığımız MainPage.xaml.cs içeriği
[MainPage.xaml.cs]
using System; using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace UniversalAppCs { /// <summary> /// An empty page that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private async void btnHelloWorld_Click(object sender, RoutedEventArgs e) { txtHelloWorld.Text = "Windows Universal App, Hello World."; MessageDialog message = new MessageDialog("Windows Universal App with C#, Like it ? "); message.Title = "Hello World"; message.Commands.Add(new UICommand { Label = "Yes", Id = 0 }); message.Commands.Add(new UICommand { Label = "No", Id = 1 }); var res= await message.ShowAsync(); if ((int)res.Id == 0) { MessageDialog msg = new MessageDialog("Thank you very much :) "); msg.Title = "Thanks"; msg.Commands.Add(new UICommand { Label = "Ok", Id = 0 }); await msg.ShowAsync(); } } } }
Burada basit olarak bir ekran hazırladık ve içinde butona bastığımızda değişen bir mesaj ekleyip sonrasında ise kullanıcıya mesaj verip işlemi kontrol etmesini sağladık. Uygulama çalıştığında aşağıdaki gibi ekran görüntülerindeki gibi olacaktır.
Burada dikkat etmemiz gereken bir konu var. Eğer işletim sisteminizde geliştirici seçenekleri aktif değil ise uygulamayı dizayn ederken uyarı alırız. Bu özelliği aktif etmek için Başlat > Ayarlar > Güncelleştirme ve güvenlik > Geliştiriciler için sekmesi altından Geliştirici modu seçeneğini aktif etmeliyiz. Bu ayarlamayı yaptıktan sonra ise uygulamamızı dizayn edip çalıştırabiliriz.
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
vb resource dosyası okuma
Merhaba
Yazdığımız programlarda birden fazla dil desteği sunacağımız zaman çeşitli yöntemler ile bunu yaparız. Bazen database üzerinde bir tablo içinde bazen de bir Resource dosyasında. Özel bazı durumlarda database üzerinde çoklu dil desteğine ait bilgileri tutsak bile genel olarak bu işlem Resource dosyları ile yapılmaktadır. Şimdi sizlerle birlikte basit bir console uygulaması hazırlayalım ve bu uygulama ile “Hello World” mesajını farklı diller ile yazdıralım. Bunun için projemize yeni bir item olarak Resource file ekliyoruz. Eklediğimiz dosy bizim default culture bilgisine ait olmaktadır. Diğer dillere ait bilgileri tutmak için ise tek tek resource dosyası ekleriz ve bunların isimlerinin sonuna “.” ile o dilin culture bilgisini yazarız. Bizim örneğimizde üç adet dile ait bilgileri kullanacağız. Türkçe, İngilizce ve Fransızca. Siz bunları istediğiniz gibi değiştirip çoğaltabilirsiniz. İlk eklediğimiz Resource file ismini Türkçe dili için kullanacağımızdan adını “Resource.resx” olarak belirtiyoruz, daha sonra ise İngilizce için “Resource.en-US.resx” ve Fransızca içinse “Resource.fr-FR.resx” dosyalarını oluşturuyoruz. Dosyalarımızu oluşturduğumuzda içindeki veriler aşağıdaki gibi olacaktır.
[Resource.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Merhaba Dünya</value> </data>
[Resource.en-US.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Hello World</value> </data>
[Resource.fr-FR.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Bonjour le monde</value> </data>
Şimdi bu resource dosyalarındaki bilgileri okumak için bir class hazırlayalım. Alttaki kod içindeki “ResourceManager” ilk parametresindeki değer Resource dosyasının yerini gösterir. Bizim projemizde Resource dosyası proje içindeki Resources klasörü altında olduğu için ilk parametre değeri namespace.klasöradi.resource adi şeklindedir.
[Read.vb]
Imports System.Globalization Imports System.Reflection Imports System.Resources Public NotInheritable Class Read Public Shared Function FromResource(key As String, culture As CultureInfo) Dim rm As ResourceManager = New ResourceManager("ResourcesVb.Resource", Assembly.GetExecutingAssembly()) Return rm.GetString(key, culture) End Function End Class
Okuma yapacağımız class hazır olduğuna göre, program içerisinde her bir dil için culture bilgisine ihtiyacımız olduğundan bu bilgileri tutabileceğimiz bir class hazırlayalım.
[Culture.vb]
Public NotInheritable Class Culture Public Shared Function trTR() As String Return "tr-TR" End Function Public Shared Function enUS() As String Return "en-US" End Function Public Shared Function frFR() As String Return "fr-FR" End Function End Class
Şimdide çalışacak olan programımızı yazalım.
[Program.vb]
Imports System.Globalization Module Program Sub Main() Dim cultureTR As CultureInfo = New CultureInfo(Culture.trTR()) Dim cultureUS As CultureInfo = New CultureInfo(Culture.enUS()) Dim cultureFR As CultureInfo = New CultureInfo(Culture.frFR()) Console.WriteLine("Read resources from Resource.resx with Culture") Console.WriteLine("HelloWorld with " + cultureTR.Name + " : " + Read.FromResource("HelloWorld", cultureTR)) Console.WriteLine("HelloWorld with " + cultureUS.Name + " : " + Read.FromResource("HelloWorld", cultureUS)) Console.WriteLine("HelloWorld with " + cultureFR.Name + " : " + Read.FromResource("HelloWorld", cultureFR)) Console.ReadKey() End Sub End Module
Artık herşey hazır ve programı çalıştırdığımızda ise çıktı olarak aşağıdaki gibi bir sonuç görürüz.
Read resources from Resource.resx with Culture HelloWorld with tr-TR : Merhaba Dünya HelloWorld with en-US : Hello World HelloWorld with fr-FR : Bonjour le monde
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.
c# resource dosyası okuma
Merhaba
Yazdığımız programlarda birden fazla dil desteği sunacağımız zaman çeşitli yöntemler ile bunu yaparız. Bazen database üzerinde bir tablo içinde bazen de bir Resource dosyasında. Özel bazı durumlarda database üzerinde çoklu dil desteğine ait bilgileri tutsak bile genel olarak bu işlem Resource dosyları ile yapılmaktadır. Şimdi sizlerle birlikte basit bir console uygulaması hazırlayalım ve bu uygulama ile “Hello World” mesajını farklı diller ile yazdıralım. Bunun için projemize yeni bir item olarak Resource file ekliyoruz. Eklediğimiz dosy bizim default culture bilgisine ait olmaktadır. Diğer dillere ait bilgileri tutmak için ise tek tek resource dosyası ekleriz ve bunların isimlerinin sonuna “.” ile o dilin culture bilgisini yazarız. Bizim örneğimizde üç adet dile ait bilgileri kullanacağız. Türkçe, İngilizce ve Fransızca. Siz bunları istediğiniz gibi değiştirip çoğaltabilirsiniz. İlk eklediğimiz Resource file ismini Türkçe dili için kullanacağımızdan adını “Resource.resx” olarak belirtiyoruz, daha sonra ise İngilizce için “Resource.en-US.resx” ve Fransızca içinse “Resource.fr-FR.resx” dosyalarını oluşturuyoruz. Dosyalarımızu oluşturduğumuzda içindeki veriler aşağıdaki gibi olacaktır.
[Resource.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Merhaba Dünya</value> </data>
[Resource.en-US.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Hello World</value> </data>
[Resource.fr-FR.resx]
<data name="HelloWorld" xml:space="preserve"> <value>Bonjour le monde</value> </data>
Şimdi bu resource dosyalarındaki bilgileri okumak için bir class hazırlayalım. Alttaki kod içindeki “ResourceManager” ilk parametresindeki değer Resource dosyasının yerini gösteriri. Bizim projemizde Resource dosyası proje içindeki Resources klasörü altında olduğu için ilk parametre değeri namespace.klasöradi.resource adi şeklindedir.
[Read.cs]
using System.Globalization; using System.Reflection; using System.Resources; namespace ResourcesCs { public static class Read { public static string FromResource(string key, CultureInfo culture) { ResourceManager rm = new ResourceManager("ResourcesCs.Resources.Resource", Assembly.GetExecutingAssembly()); return rm.GetString(key, culture); } } }
Okuma yapacağımız class hazır olduğuna göre, program içerisinde her bir dil için culture bilgisine ihtiyacımız olduğundan bu bilgileri tutabileceğimiz bir class hazırlayalım.
[Culture.cs]
namespace ResourcesCs { public static class Culture { public static string trTR() { return "tr-TR"; } public static string enUS() { return "en-US"; } public static string frFR() { return "fr-FR"; } } }
Şimdide çalışacak olan programımızı yazalım.
[Program.cs]
using System; using System.Globalization; namespace ResourcesCs { class Program { static void Main(string[] args) { CultureInfo cultureTR = new CultureInfo(Culture.trTR()); CultureInfo cultureUS = new CultureInfo(Culture.enUS()); CultureInfo cultureFR = new CultureInfo(Culture.frFR()); Console.WriteLine("Read resources from Resource.resx with Culture"); Console.WriteLine("HelloWorld with " + cultureTR.Name + " : " + Read.FromResource("HelloWorld", cultureTR)); Console.WriteLine("HelloWorld with " + cultureUS.Name + " : " + Read.FromResource("HelloWorld", cultureUS)); Console.WriteLine("HelloWorld with " + cultureFR.Name + " : " + Read.FromResource("HelloWorld", cultureFR)); Console.ReadKey(); } } }
Artık herşey hazır ve programı çalıştırdığımızda ise çıktı olarak aşağıdaki gibi bir sonuç görürüz.
Read resources from Resource.resx with Culture HelloWorld with tr-TR : Merhaba Dünya HelloWorld with en-US : Hello World HelloWorld with fr-FR : Bonjour le monde
Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.