...可能不会在此上下文中使用...同时序列化

时间:2010-04-28 14:14:48

标签: c# serialization web-services

我有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]正常工作时,但是当它更多时它会破坏

2 个答案:

答案 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)
    }
);