我有一个对象,我们称它为 UnSerializableObject,我不能更改它,我需要序列化它。所以我创建了自己的对象,称为 SerializableObject,它是可序列化的,并且包含与原始对象相同的所有数据。看起来像这样:
namespace test
[Serializable]
class SerializableObject
{
private int item1;
public int Item1
{
get;
set;
}
public SerializableObject()
{}
}
然后我创建了另一个类,它在 SerializableObject 和 UnSerializableObject 之间进行转换。 在服务方面一切正常。服务中的方法将 SerializableObject 作为参数,我将其转换为 UnSerializableObject。问题出在客户端。我使用 svcutil 创建客户端代码。然后我将一个 Object 转换为 SerializableObject 并在服务调用中使用 SerializableObject。像这样:
TTSServiceClient aClient = new TTSServiceClient();
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = ObjectConverter.ToSerializableObject(loMMessage);
aClient.Allocate_OnStartResultAck(loSMMessage);
当我编译客户端时出现错误:
错误 59 参数“1”:无法从“test.Utilities.SerializableObject [c:\Projects\Client\Client\test.Utilities.dll]”转换为“test.Utilities.SerializableObject [C:\Projects\Client\Client\Service.cs(19)]'
static Class ObjectConverter
{
static public SerializableObject ToSerializableObject(UnSerializableObject usObject)
{
SerializableObject sObject = new SerializableObject();
sObject.Item1 = usObject.Item1;
return sObject;
}
}
为什么会这样?我该如何解决?有更好的方法来处理这个问题吗?
最佳答案
我不得不在客户端重写我的转换方法并删除对 test.utilities.dll 的引用。所以本质上是这样
TTSServiceClient aClient = new TTSServiceClient();
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = ObjectConverter.ToSerializableObject(loMMessage);
aClient.Allocate_OnStartResultAck(loSMMessage);
成为
TTSServiceClient aClient = new TTSServiceClient();
UnSerializableObject loMMessage = new MostMessage();
SerializableObject loSMMessage = new SerializableObject();
loSMMessage.Item1 = loMMessage.Item1;
aClient.Allocate_OnStartResultAck(loSMMessage);
这有点烦人,但它有效。
关于c# - WCF 序列化类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575671/