2013-03-26 22 views
5

tôi có 2 lớp:đèo đối tượng với tài sản phức tạp với dịch vụ web

public class testClass1 
    { 
     public string Name { get; set; } 
     public testClass2 testClass2Object { get; set; } 
    } 

    public class testClass2 
    { 
     public testClass2() { } 

     public testClass2(int i) { TestProperty = i; } 

     public int TestProperty { get; set; } 
    } 

và tôi muốn trở về đối tượng đầu tiên lớp với webMethod:

[WebMethod] 
    public testClass1 testMethod() 
    { 
     testClass1 test = new testClass1(); 
     test.Name = "stackoverflow"; 
     test.testClass2Object = new testClass2(2); 
     return test; 
    } 

nhưng tôi không nhận được các giá trị của testClass2 thuộc tính từ đối tượng testClass1.

Tôi đã thử chú thích [Serializable] [XmlInclude(typeof(testClass2))] nhưng không có gì thay đổi. Bất kỳ đề xuất?

+6

Điều gì xảy ra nếu bạn loại bỏ hàm tạo 'công thức testClass2 (int i)'? Và nếu bạn thay đổi khai báo thành 'public testClass2 (int testProperty)' thì sao? (Tôi yêu cầu thứ hai bởi vì tôi biết tên thực tế của tham số ctor có thể ảnh hưởng đến JSON serialization, không chắc chắn nếu nó sẽ ảnh hưởng đến serialization khác mặc dù). –

+1

@Matthew Watson Đã loại bỏ hàm tạo và giờ nó hoạt động nhờ. – pepela

+0

@Matthew Watson Tôi không thể có hàm tạo với tham số nếu tôi muốn gửi đối tượng của nó? – pepela

Trả lời

1

Nếu tôi chạy mã "nguyên trạng" và gọi TestMethod(), tôi nhận được ...

<testClass1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> 
    <Name>stackoverflow</Name> 
    <testClass2Object> 
      <TestProperty>2</TestProperty> 
    </testClass2Object> 
</testClass1> 

Bạn đang mong đợi một cái gì đó khác nhau? Có lẽ tôi đang thiếu một cái gì đó.

Nếu đây là một phần của dự án lớn hơn, có thể thử chỉ đặt mã này vào một dự án mới và xem đó có phải là cài đặt hay loại cấu hình khác của sự cố hay không.

+1

Ha! Tôi đã không nhận ra tôi đã đặt một tiền thưởng cho câu hỏi này. :) –

0

Tôi chạy mã của bạn và đầu ra là thứ tôi đã mong đợi. Bạn nên sử dụng phân tích cú pháp xml để lấy dữ liệu của bạn từ testclass2.

EDIT

Tôi khuyên bạn nên sử dụng Web API thay vì lạc hậu ASMX, mà sử dụng SOAP để tạo phi cấu trúc tấn không-schema của XML trong đầu ra.

Web-API có đầu ra nhanh và nhẹ và bạn có thể có cả định dạng JSON và XML làm đầu ra. rất mạnh mẽ!

Các vấn đề liên quan