Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kullanıcı tanımlı bir türü belirli bir kablo biçimine seri hale getirdiğinizde veya kablo biçimini yeniden kullanıcı tanımlı bir türe seri durumdan çıkarırken, verilen kullanıcı tanımlı türün hem hizmette hem de istemcide kullanılabilir olması gerekir. Bunu gerçekleştirmek için DataContractAttribute özniteliği genellikle bu kullanıcı tanımlı türlere uygulanır ve DataMemberAttribute özniteliği onların üyelerine uygulanır. Bu mekanizma, Nasıl yapılır: JSON Verilerini Seri Hale Getirme ve Seri Durumdan Çıkarma konusunda açıklandığı gibi JavaScript Nesne Gösterimi (JSON) nesneleriyle çalışırken de geçerlidir.
Bazı senaryolarda, bir Windows Communication Foundation (WCF) hizmeti veya istemcisinin, geliştiricinin denetimi dışında olan bir hizmet veya istemci tarafından oluşturulan JSON nesnelerine erişmesi gerekir. Daha fazla Web hizmeti JSON API'lerini genel kullanıma sundukça, WCF geliştiricisinin rastgele JSON nesnelerini seri durumdan çıkarmak için yerel kullanıcı tanımlı türler oluşturması pratik olmayan bir hale gelebilir.
WeaklyTypedJson örneği, WCF geliştiricilerinin kullanıcı tanımlı türler oluşturmadan seri durumdan çıkarılmış, rastgele JSON nesneleriyle çalışmasını sağlayan bir mekanizma sağlar. JSON nesnesinin seri durumdan çıkarıldığı tür derleme zamanında bilinmediğinden bu, JSON nesnelerinin zayıf tür seri hale getirilmesi olarak bilinir.
Örneğin, bir genel Web hizmeti API'si, hizmetin kullanıcısı hakkında bazı bilgileri açıklayan aşağıdaki JSON nesnesini döndürür.
{"personal": {"name": "Paul", "age": 23, "height": 1.7, "isSingle": true, "luckyNumbers": [5,17,21]}, "favoriteBands": ["Band ABC", "Band XYZ"]}
Bu nesnenin seri durumdan çıkarılması için, wcf istemcisinin aşağıdaki kullanıcı tanımlı türleri uygulaması gerekir.
[DataContract]
public class MemberProfile
{
[DataMember]
public PersonalInfo personal;
[DataMember]
public string[] favoriteBands;
}
[DataContract]
public class PersonalInfo
{
[DataMember]
public string name;
[DataMember]
public int age;
[DataMember]
public double height;
[DataMember]
public bool isSingle;
[DataMember]
public int[] luckyNumbers;
}
Bu, özellikle istemcinin birden fazla JSON nesnesi türünü işlemesi gerekiyorsa hantal olabilir.
JsonObject Bu örnek tarafından sağlanan tür, seriden çıkarılmış JSON nesnesinin zayıf tipte bir gösterimini tanıtır.
JsonObject JSON nesneleri ile .NET Framework sözlükleri arasındaki doğal eşlemeyi ve JSON dizileri ile .NET Framework dizileri arasındaki eşlemeyi temel alır. Aşağıdaki kod türü JsonObject gösterir.
// Instantiation of JsonObject json omitted
string name = json["root"]["personal"]["name"];
int age = json["root"]["personal"]["age"];
double height = json["root"]["personal"]["height"];
bool isSingle = json["root"]["personal"]["isSingle"];
int[] luckyNumbers = {
json["root"]["personal"]["luckyNumbers"][0],
json["root"]["personal"]["luckyNumbers"][1],
json["root"]["personal"]["luckyNumbers"][2]
};
string[] favoriteBands = {
json["root"]["favoriteBands"][0],
json["root"]["favoriteBands"][1]
};
JSON nesnelerine ve dizilerine türlerini derleme sırasında bildirmeye gerek kalmadan "göz atabileceğinizi" bilmelisiniz. En üst düzey ["root"] nesne gereksiniminin açıklaması için JSON ile XML Arasında Eşleme konusuna bakın.
Not
JsonObject sınıfı yalnızca örnek olarak sağlanır. Kapsamlı bir şekilde test edilmemiştir ve üretim ortamlarında kullanılmamalıdır. Zayıf türlenmiş JSON serileştirmenin belirgin bir etkisi, JsonObject ile çalışırken tür güvenliğinin olmamasıdır.
Tür JsonObject'i kullanmak için, istemci işlem sözleşmesinin dönüş türü olarak Message kullanması gerekir.
[ServiceContract]
interface IClientSideProfileService
{
// There is no need to write a DataContract for the complex type returned by the service.
// The client will use a JsonObject to browse the JSON in the received message.
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
Message GetMemberProfile();
}
JsonObject daha sonra aşağıdaki kodda gösterildiği gibi örneği oluşturulur.
// Code to instantiate IClientSideProfileService channel omitted…
// Make a request to the service and obtain the Json response
XmlDictionaryReader reader = channel.GetMemberProfile().GetReaderAtBodyContents();
// Go through the Json as though it is a dictionary. There is no need to map it to a .NET CLR type.
JsonObject json = new JsonObject(reader);
JsonObject Oluşturucu, GetReaderAtBodyContents yöntemi aracılığıyla elde edilen bir XmlDictionaryReader alır. Okuyucu, istemci tarafından alınan JSON iletisinin XML gösterimini içerir. Daha fazla bilgi için JSON ve XML Arasında Eşleme konusuna bakın.
Program aşağıdaki çıkışı oluşturur:
Service listening at http://localhost:8000/.
To view the JSON output from the sample, navigate to http://localhost:8000/GetMemberProfile
This is Paul's page. I am 23 years old and I am 1.7 meters tall.
I am single.
My lucky numbers are 5, 17, and 21.
My favorite bands are Band ABC and Band XYZ.
Örneği ayarlamak, derlemek ve çalıştırmak için
Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.
Çözümü WeaklyTypedJson.sln, Windows Communication Foundation Örneklerini Oluşturma bölümünde açıklandığı gibi oluşturun.
Çözümü çalıştırın.