SORU
18 Ocak 2010, PAZARTESİ


Nasıl bir WCF servisinden JSON temiz iade edebilirim?

XML bir hizmetten bazı JSON dönmek için çalışıyorum. Bu hizmeti sadece benim veritabanından bazı içerik döndürür. Verileri alabilirim. Ancak, benim JSON biçimi hakkında endişe duyuyorum. Şu anda, geri alır JSON bu gibi biçimlendirilmiş:

{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"} 

Gerçekte, benim JSON olabildiğince olarak temiz bir şekilde biçimlendirilmiş olmak istiyorum. Sanırım (yanlış olabilirim) sonuç aynı toplama, temiz JSON temsil, gibi görünmelidir:

[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},{"Age":31,"FirstName":"Drew","LastName":"Brees"},{"Age":29,"FirstName":"Tony","LastName":"Romo"}]

Nerede hiçbir fikrim yok “d” geliyor. Ben de kaçış karakteri yerleştirildi neden hiçbir ipucu var. Benim varlık aşağıdaki gibidir:

[DataContract]
public class Person
{
    [DataMember]
    public string FirstName { get; set; }

    [DataMember]
    public string LastName { get; set; }

    [DataMember]
    public int Age { get; set; }

    public Person(string firstName, string lastName, int age)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Age = age;
    }
}

İçerik dönen ve sorumlu bir hizmet olarak tanımlanır:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
    [OperationContract]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    public string GetResults()
    {
        List<Person> results = new List<Person>();
        results.Add(new Person("Peyton", "Manning", 35));
        results.Add(new Person("Drew", "Brees", 31));
        results.Add(new Person("Tony", "Romo", 29));

        // Serialize the results as JSON
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
        MemoryStream memoryStream = new MemoryStream();
        serializer.WriteObject(memoryStream, results);

        // Return the results serialized as JSON
        string json = Encoding.Default.GetString(memoryStream.ToArray());
        return json;
    }
}

Nasıl “” JSON gelen XML bir hizmet?temiz iade edebilirim Teşekkür ederim!

CEVAP
18 Ocak 2010, PAZARTESİ


Senin GetResults dönüş türü List<Person> olarak değiştirin.
Bir json dizeye Listesi seri hale getirmek için kullandığınız kod ortadan kaldırmak - XML sizin için bunu otomatik olarak yapar.

Kişi sınıfı için tanım kullanarak, bu kod benim için çalışıyor:

public List<Person> GetPlayers()
{
    List<Person> players = new List<Person>();
    players.Add(new  Person { FirstName="Peyton", LastName="Manning", Age=35 } );
    players.Add(new  Person { FirstName="Drew", LastName="Brees", Age=31 } );
    players.Add(new  Person { FirstName="Brett", LastName="Favre", Age=58 } );

    return players;
}

sonuçlar:

[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},  
 {"Age":31,"FirstName":"Drew","LastName":"Brees"},  
 {"Age":58,"FirstName":"Brett","LastName":"Favre"}]

(Bir satır)

Ben de yöntemi bu özniteliği kullanılır:

[WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "players")]

Webİnvoke Yöntemi ile= "" WebGet aynıdır, ama benim yöntemlerden bazıları POST olduğundan, tutarlılık. tüm Webİnvoke ben kullanabilirsiniz

Bu UriTemplate hangi yöntem kullanılabilir URL'Yİ ayarlar. Üzerinde alabilirim böylece ** 15 ve çok işe yarıyor.

Ayrıca İİRF ya da başka bir URL yeniden yazma kurtulmak için kontrol edin .URİ svc.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Incredible Tutorials

    Incredible T

    27 EKİM 2006
  • Matthew Morrill

    Matthew Morr

    15 EKİM 2011
  • RealPapaPit

    RealPapaPit

    16 Mart 2009