我正往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-Method。为此,我使用以下代码:
FrameRegistrationClient client = new FrameRegistrationClient();
client.RegisterFrame(new Frame
{
Name = "Login",
Type = typeof(LoginWindow)
});LoginWindow是一个WPF窗口.
对RegisterFrame的调用引发一个异常,该异常看起来类似于:
类型'System.RuntimeType‘的数据记录名为'RuntimeType:http://schemas.datacontract.org/2004/07/System’,这是不需要的。尝试使用DataContractResolver或将所有未知类型添加到已知类型的静态列表中。..。
不确定异常消息是否正确。我把它从德语翻译过来了。
如何将FrameType作为Type发送给我的客户?
发布于 2014-05-05 08:08:24
不能像这样序列化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; }
}https://stackoverflow.com/questions/23467073
复制相似问题