2010-04-20 72 views
1

如何从webmethod返回对象集合?而且可以在这个集合对象是不同类型的 - 说这3个班,返回webmethod中的对象集合

private class ClassA 
{ 
    int A1; 
    int A2; 
} 

private class ClassB 
{ 
    int B1; 
} 

private class ClassC 
{ 
    int C1; 
} 

ClassA objA = new ClassA(...); 
ClassB objB = new ClassB(...); 
ClassC objC = new ClassC(...); 

如何从一个方法返回的对象,objA,objB和objC?

回答

0

将它们作为数组或列表返回。我没有在我面前的IDE,但它应该像

[WebMethod] 
public object[] GetObjects() 
{ 
    ... 
    return new object[] { objA, objB, objC }; 
} 

更好的是,如果他们继承了相同的基类或接口。

3

由于相同方法的不同可能结果?这将是丑陋的,并且不允许僵硬的模式(认为:WSDL)存在。也许将所有4个选项封装在一个单一的类型上,你会返回?或者使用某种继承和[XmlInclude]。在多个值的情况下,您可以返回List<TheBaseType>

如果你的意思是“我要一重击方法的所有这些”,那么只是包装他们:

public class MyReturnType { 
    public ClassA A { get;set; } 
    public ClassB B { get;set; } 
    public ClassC C { get;set; } 
} 

,并返回(多值或List<MyReturnType>)的MyReturnType一个实例。

+0

但公共类MyReturnType既可以只有一个或更多的类取决于一些内部逻辑。这就是为什么我在List <变化的对象>中考虑更多的原因(如果有什么可能的话)? – 2010-04-20 17:24:18

+0

@Narmatha,这是可能的。如果你的每个类继承自一个公共基地,你可以返回'List '或'Base []'。如果没有这个,你必须把它作为'object'的列表或数组返回。 – 2010-04-20 17:27:44

+0

返回复合MyReturnType将是理想情况下的最佳解决方案。但是这个类的元素只在运行时才知道,并且在运行时声明一个类很困难(不是不可能的)。所以为了我的需要,坚持一系列对象是有道理的。 – 2010-04-21 18:39:20

0

您可以执行下列操作之一:

  • 有一个包含所有这些3个对象的自定义对象(而不是作为一个名单,但作为单独的对象),并通过该化合物的对象。

  • 如果这些(三个对象)从基类继承的则只是通过这个基类的列表,所有这些存储在列表