2016-03-31 25 views
1

i istemci tarafında gelen ajax, wcf yöntemine veri göndermek için çalışıyorum seri haledinamik nesne

public class DynamicParse 
{  

    // other properties 

    public dynamic Value {get;set;} 
} 

// wcf method 
public void PostData(List<DynamicParse> list) 
{ 
    // parse list[0].Value 
} 

wcf yöntemine gönderilir javascript dizi:

var data = [{ Value : 1 }, { Value : "test" }, { Value : { message : "hello" } }]; 

benim zorluğudur "Value" özelliği C#,

'dan "Value" özelliği bir nesne türü-> {message: "merhaba"} olduğunda verileri nasıl ayrıştırabilirim? Yansıma ve json serileştirmeyi denedim ve şu ana kadar hiç bir başarı elde edemedim ..

Belirtilen veriler dinamik tip olmadan ayrıştırmak için başka bir seçenek var mı? veya bu sorun için burada uygun mu?

sayesinde

+0

'Value' as' object' yazmayı denediniz mi? –

cevap

0

Her şeyden önce, JSON dair özel veri türü vardır. Bir modelle eşleştirmelisin.

Her şeyin dinamik olmasını istediğinizden, yalnızca Value adlı dinamik özellikteki veri türünü kontrol edebilirsiniz.

public class DynamicParse 
{  

    // other properties 

    public dynamic Value {get;set;} 
} 

// wcf method 
public void PostData(List<DynamicParse> list) 
{ 
    // parse list[0].Value 
    foreach(var entry in list) 
    { 
     if(entry.Value is int) 
     { 
      int num = entry.Value; 
     } 
     else if(entry.Value is string) 
     { 
      string someString = entry.Value; 
     } 
     else if(entry.Value is MyCustomClass) 
     { 
      MyCustomClass myClass = entry.Value; 
      // Do something 
     } 
     else 
     { 
      // Do something 
     } 
    }  
} 

Özellik veri türü, .NET çerçevesi tarafından belirlenir, böylece yalnızca ne olduğunu kontrol etmeniz gerekir.

DÜZENLEME:

Ayrıca nesne dinamik gelen DynamicParse Değerinin özelliğini değiştirebilir, dezavantajı manuel olarak döküm zorunda kalacak olan.

public class DynamicParse 
{  

    // other properties 

    public object Value {get;set;} 
} 

Yani böyle değerini kontrol etmek zorunda kalacak .. dinamik İçin

if(entry.Value is MyCustomClass) 
{ 
    MyCustomClass someObject = (MyCustomClass)entry.Value; 
} 

, sadece dökme değeri atamak ama gerek nesne için bunu döküm gerekiyor.

İlgili konular