我有webservice和WebMethod
[webMethod]
[XMLInclude(typeof(ContractCar[]))
public object GetObjects(Cars[] cars)
{
return Translator.ToObjects(Facade.GetObjects(cars);
}
public static object GetObjects(Cars cars)
{
List<Car> cars =new List<Country(...fillingcollection)
return cars.ToArray(),
}
public static object ToObjects(object collection)
{
if(collection is Car[])
{
return ConvertModelCarsToContractCars(collection),
}
public ContractCar[] ConvertModelCarsToContractCars(Cars[] collection)
{
...there is rewriting pool...
}
我在客户方面得到例外:
生成XML文档时出错。
我正在使用此功能来检查我将发送给客户端的集合,并且它可以正常工作。
public static void SerializeContainer(object obj)
{
try
{
// Make sure even the construsctor runs inside a
// try-catch block
XmlSerializer ser = new XmlSerializer(typeof(object));
TextWriter w = new StreamWriter(@"c:\list.xml");
ser.Serialize(w, obj);
w.Close();
}
catch (Exception ex)
{
DumpException(ex);
}
}
有趣的是,当集合只有一个元素[webmethod]正常工作时,但是当它更多时它会破坏
答案 0 :(得分:2)
我将object
更改为objects[]
。
答案 1 :(得分:1)
您需要使用XmlIncludeAttribute向序列化程序和WSDL中指出Cars
可以是ModelCar
:
[WebMethod]
[XmlInclude(typeof(ModelCar))]
public object GetObjects(Cars[] cars)
{
return Translator.ToObjects(Facade.GetObjects(cars);
}
您需要指明从方法返回的可能类型。与返回对象的方法签名一样,序列化程序不知道您在运行时返回的实际类型。
在您的序列化示例中:
XmlSerializer ser = new XmlSerializer(
typeof(object),
new Type[] {
// List all the possible types here that you are using
typeof(Foo),
typeof(Bar)
}
);