我正在为WCF做点什么。
我使用以下ServiceContract
创建了一个WCF服务:
[ServiceContract]
public interface IFrameRegistration
{
[OperationContract]
void RegisterFrame(Frame frame);
[OperationContract]
void UnregisterFrame(string frameName);
[OperationContract]
IList<Frame> GetRegisteredFrames();
[OperationContract]
Frame GetFrameByName(string frameName);
}
框架 - DataContract
看起来像:
[DataContract]
public class Frame
{
[DataMember]
public string FrameName { get; set; }
[DataMember]
public Type FrameType { get; set; }
}
WCF服务工作正常。它启动,我可以从我的客户端应用程序访问它。
在我的客户端应用程序中,我想调用RegisterFrame
- 方法。因此,我使用以下代码:
FrameRegistrationClient client = new FrameRegistrationClient();
client.RegisterFrame(new Frame
{
Name = "Login",
Type = typeof(LoginWindow)
});
LoginWindow
是一个WPF窗口。
对RegisterFrame的调用抛出一个类似于:
的异常带有datacontractname的“System.RuntimeType”类型 'runtimeType:http://schemas.datacontract.org/2004/07/System'不是 预期。尝试使用DataContractResolver或添加所有未知类型 到已知类型的静态列表。 ...
不确定异常消息是否正确。我把它翻译成德语。
如何将FrameType
作为Type
发送给我的客户?
答案 0 :(得分:2)
System.Type类型不能像这样序列化。您可以添加字符串属性,如下所示:
[DataContract]
public class Frame
{
[DataMember]
public string FrameName { get; set; }
[DataMember]
public string FrameTypeName
{
get
{
// or FrameType.FullName, depends on compatibility between client & server
return FrameType != null ? FrameType.AssemblyQualifiedName : null;
}
set
{
FrameType = value != null ? Type.GetType(value, true) : null;
}
}
// don't serialize this one
[IgnoreDataMember]
public Type FrameType { get; set; }
}