wcf调用的System.Windows.Media.Media3D.Vector3d串行化出现异常
本文关键字:异常 Vector3d Media3D 调用 System Windows Media wcf | 更新日期: 2023-09-27 18:25:25
我正试图在wcf上发送一个类,我在序列化这个类System.Windows.Media.Media3D.Vector3d时遇到问题。我得到了这个异常
尝试序列化参数WEntityService:iState时出错。InnerException消息为数据协定名称为"Type"System.Windows.Media3D.Vector3D'矢量3D:http://schemas.datacontract.org/2004/07/System.Windows.Media.Media3D不应为"。考虑使用DataContractResolver或将任何不静态已知的类型添加到已知类型列表中-例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。'
有关详细信息,请参阅InnerException。
[DataContract]
public ref class WData
{
public:
WData();
[DataMember]
Vector3D^ mLinearVelocity;
[DataMember]
System::String^ mName;
};
WData::WData()
: mLinearVelocity(gcnew Vector3D(0.0, 0.0, 0.0))
, mName(gcnew System::String(' ', 1))
{
}
在msdn网站上http://msdn.microsoft.com/en-us/library/ms606682.aspx,您可以看到Vector3D具有Serializable属性。对于wcf可串行类型,如果我参考此网页:http://msdn.microsoft.com/en-us/library/ms731923.aspxVector3D对于wcf应该是可序列化的。有人能解释一下为什么它没有连载吗。Thks。
您可以将Vector3D添加到已知类型的列表中吗?请参阅以下数据合约级别的示例。我认为这应该能解决你的问题。
[DataContract]
public class Book { }
[DataContract]
public class Magazine { }
[DataContract]
[KnownType(typeof(Book))]
[KnownType(typeof(Magazine))]
public class LibraryCatalog
{
[DataMember]
System.Collections.Hashtable theCatalog;
}
如果不能在数据约定级别添加已知类型,而只能在服务约定级别添加,则可以执行以下操作--添加[ServiceKnownTypeAttribute]!
// Apply the ServiceKnownTypeAttribute to the
// interface specifying the type to include. Apply
// the attribute more than once if needed.
[ServiceKnownType(typeof(Widget))]
[ServiceKnownType(typeof(Machine))]
[ServiceContract()]
public interface ICatalog2
{
// Any object type can be inserted into a Hashtable. The
// ServiceKnownTypeAttribute allows you to include those types
// with the client code.
[OperationContract]
Hashtable GetItems();
}