2013-10-03 4 views
5

पर एक सूची भेजना मैं Wcf Service और JS का उपयोग करता हूं।किसी ऑब्जेक्ट के भीतर WCF सेवा

मैं AJAX द्वारा अपनी सेवा में जानकारी भेजता हूं।

[DataContract] 
    public class Business 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public string Desc { get; set; }   
     [DataMember] 
     public List<BusinessService> Services { get; set; } 
    } 

BusinessService.cs:

[DataContract] 
    public class BusinessService 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public string Desc { get; set; } 
     [DataMember] 
     public int LongTime { get; set; } 
    } 

मैं JSON करने के लिए मेरी जे एस में वस्तुओं को पार्स करने और उन्हें भेजने के

मैं सेवा है जो निम्न वस्तु को स्वीकार करता है में एक समारोह है सर्विस।

यहाँ json कि WCF समारोह पर भेज दें:

"{"ManageBusiness":{"Name":"aaaaaa","Desc":"aaaaaaaaaaaa","Services":[{"Name":"aaaaaa","Desc":"aaaaaa","LongTime":30},{"Name":"aaaaaa1","Desc":"aaaaaa","LongTime":30}]}}" 

सब कुछ काम करता है के रूप में यह Services सूची सिवाय चाहिए।

सूची wcf फ़ंक्शन को शून्य के रूप में आता है।

मुझे नहीं पता कि यह क्यों हो रहा है, मैं मदद की सराहना करता हूं?

उत्तर

4

आप JSON डेटा से List<T> को तुरंत चालू नहीं कर सकते हैं।

[DataContract] 
    public class Business 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public string Desc { get; set; }   
     [DataMember] 
     public BusinessService[] Services { get; set; } 
    } 

है कि साथ

[DataContract] 
    public class Business 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public string Desc { get; set; }   
     [DataMember] 
     public List<BusinessService> Services { get; set; } 
    } 

, Array of T

+0

के लिए आवश्यक नहीं है यह भी मदद नहीं की है। सूची शून्य हो रही है। –

+0

ठीक है, आपका JSON प्रतिनिधित्व अच्छी तरह से गठित है इसलिए मैं समझ नहीं पा रहा हूं कि क्या गलत हो सकता है, क्या आप कुछ और कोड भेज सकते हैं? उदाहरण के लिए सी # कोड जो कॉल और जावास्क्रिप्ट कोड को संभालता है जो अनुरोध भेजता है? –

+0

क्या यह वास्तव में काम कर रहा है? मैं भी इसी परिदृश्य से गुजर रहा हूं! मुझे वह कोड चाहिए। –

0

साथ List<T> की जगह आप WCF Service Trace Viewer का उपयोग आप देखने में मदद कर सकते हैं और त्रुटियों आप से मिलता है का पता लगाने: आप क्या कर सकते हैं, की जगह है सर्विस।

0

इस कोशिश,

var data = "{"ManageBusiness":{"Name":"aaaaaa","Desc":"aaaaaaaaaaaa","Services":[{"Name":"aaaaaa","Desc":"aaaaaa","LongTime":30},{"Name":"aaaaaa1","Desc":"aaaaaa","LongTime":30}]}}"; 

ajax कॉल

contentType: "application/json", 
data: JSON.stringify({ business: data }), 

नीचे कोड में नीचे जोड़े डेटा

public ActionResult BusinessCall(Business business){} 
0

प्राप्त करने के लिए निम्नलिखित मैं कह सकता हूँ निश्चित काम करता है। मैंने अभी इसका परीक्षण किया। क्षमा करें vb.net में, लेकिन आपको विचार मिलना चाहिए।

सर्वर साइड पर: IService1.vb

Imports System.ServiceModel 
Imports System.ServiceModel.Activation 
Imports System.ServiceModel.Web 

Namespace Webservices 
    <ServiceContract()> 
    Public Interface IService1 

    <OperationContract()> _ 
    <WebInvoke(method:="POST", ResponseFormat:=WebMessageFormat.Json, BodyStyle:=WebMessageBodyStyle.WrappedRequest)> _ 
    Function test(manageBusiness As ManagedBusiness) As string 

    End Interface 
End Namespace 

में Service1.svc.vb

Imports System.Runtime.Serialization 
Imports System.ServiceModel.Activation 
Namespace Webservices 
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Required)> 
Public Class Service1 
    Implements IService1 
    Public function test(manageBusiness As ManagedBusiness) As string Implements IService1.test 
     Return "done" 
    End function  
End Class 

<CollectionDataContract()> 
Public Class Services 
    Inherits List(Of Service) 
End Class 

<DataContract()> 
Public Class Service 
    <DataMember()>Public Property Name As String 
    <DataMember()>Public Property Desc As String 
    <DataMember()>Public Property LongTime As Integer 
End Class 

<DataContract()> 
Public Class ManagedBusiness 
    <DataMember()>Public Property Name As String 
    <DataMember()>Public Property Desc As String 
    <DataMember()>Public Property Services As Services 

End Class 
End NameSpace 

में मैं webconfig सेटिंग्स वायर्ड।और क्लाइंट साइड पर इस jQuery ajax कॉल डाल:

$("#btnTest").click(function() { 
      var services = []; 
      services.push({ 
       Name: "aaaaaa", 
       Desc: "aaaaaa", 
       LongTime: 30 
      }); 
      services.push({ 
       Name: "aaaaaa1", 
       Desc: "aaaaaa", 
       LongTime: 30 
      }); 
      var data = {}; 
      data.manageBusiness = { 
       Name: "aaaaaa", 
       Desc: "aaaaaaaaaaaa", 
       Services: services 
      } 


      $.ajax({ 
       type: "POST", 
       url: "http://localhost:64110/Webservices/Service1.svc/test", 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       async: true, 
       data: JSON.stringify(data), 
       success(msg) { 

       } 
      }); 


     }); 

मैं पुष्टि कर सकता है कि अनुरोध किया पेलोड इस प्रकार थी:

{"manageBusiness":{"Name":"aaaaaa","Desc":"aaaaaaaaaaaa","Services":[{"Name":"aaaaaa","Desc":"aaaaaa","LongTime":30},{"Name":"aaaaaa1","Desc":"aaaaaa","LongTime":30}]}} 

और WCF सेवा सब कुछ ठीक deserialized। मुझे लगता है कि आप क्या खो रहे थे [CollectionDataContract] विशेषता थी।

अपडेट: मैंने [CollectionDataContract] विशेषता को हटाने का प्रयास किया और यह अभी भी काम किया है। तो मैं अनुमान लगा रहा हूं कि डेटा अनुबंध विशेषता केवल क्रमबद्ध करने के लिए हैं, deserializing (?)

संबंधित मुद्दे