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。

wcf调用的System.Windows.Media.Media3D.Vector3d串行化出现异常

您可以将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();
}