从WCF服务公开未知类型的对象

时间:2011-03-04 16:55:18

标签: wcf

[OperationContract]
public object  GetDeserializedObject(int partyContactID)
{
   PartyContact partyContact = GetPartyContactById(partyContactID);
   ContactTermResultQueue resultQueue = GetContactTermResultQueueByID(partyContact.TemplateQueueID);
   byte[] contactDataSetArray = resultQueue.QueryResult;
   //Getting DataSet from the byte array
   BinaryFormatter binaryFormatter = new BinaryFormatter();
   Stream mStreamtoRead = new MemoryStream(contactDataSetArray);
   object o = binaryFormatter.Deserialize(mStreamtoRead);

   mStreamtoRead.Close();
   object returnData=null;
   if (o.GetType().IsArray)
   {
      object[] os = o as object[];
      var value = from vs in os where (int) (vs.GetType().GetProperty("PartyID").GetValue(vs, null)) == partyContact.PartyID select vs;
      if (value.Count() > 0)
      {
         returnData = value.First();
      }
    }
    return returnData;
 }

由于我不知道我们将在数据库中拥有什么类型的数据,所以想要从该服务返回该对象,但它给了我一个例外。

请让我知道如何实现这一目标?

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以使用“原始”Message数据类型执行某些操作 - 但它确实不是很好的编程......

在这里阅读:

答案 1 :(得分:2)

您无法返回object并希望它能够正常运行。原因是此代码背后的WCF引擎使用序列化。当客户端收到消息时,它必须能够将其反序列化回某个对象,但为了能够这样做,它必须知道它接收的对象类型。

如果您想发送“未知”数据,请使用XElement。客户端只接收XML,它将负责处理它(解析它,反序列化它或其他)。