[英]XmlSerialization problems on compact framework 3.5
我正在做手指運動,並試圖編寫一個應用程序,使我的計算機和Windows移動電話可以通過藍牙槽串口進行通信。
現在我遇到了對象序列化的麻煩。 .Net Compact Framework不支持二進制序列化。因此,我選擇XmlSerialization。 我寫了一個有兩個班級的圖書館。 一個應該能夠包含其他類的ObjectCarrier,這樣我就可以采用一種通用的發送和接收方式。 並有一個服裝課MusicAlbum。
整個設置可在PC端完美運行。 移動網站不斷給我以下錯誤:System.InvalidOperationException:生成XML文檔時出錯。 ---> System.InvalidOperationException:不需要類型TransferObject.MusicAlbum。 使用XmlInclude或SoapInclude屬性可以指定靜態未知的類型。
奇怪的是,如果我使用ObjectCarrier並將類似字符串或datetime對象的內容放入有效負載中,它將在移動設備上運行。
我的MusicAlbum類出現什么問題?
--- | MusicListing.cs | -------------
using System;
using System.Collections.Generic;
using System.Text;
namespace TransferObject
{
public class MusicAlbum
{
public string AlbumName { get; set; }
public string ArtistName { get; set; }
}
}
--- | TransferObject.cs | -----------
using System;
using System.Xml.Serialization;
namespace TransferObject
{
[XmlInclude(typeof(MusicAlbum))]
public class ObjectCarrier
{
public Object PayloadObject { get; set; }
}
}
謝謝您的建議。 這有助於我回顧自己的工作方式。 通過使用抽象類,我不再需要載體。
它不起作用的原因是我自己的錯,它是Windows庫而不是移動庫。 更改后,您的代碼可以完美運行。 就我現在進行的測試而言,雙方都是如此。 如果有任何更改,我將對此進行更新。
據我了解, XmlInclude
用於子類 ; 例如,如果MusicAlbum
繼承自ObjectCarrier
,並且您正在將MusicAlbum
實例序列化為ObjectCarrier
。
海事組織,最好的方法是按類型使用消息。 但是,如果要使用[XmlInclude]
路由,則可以為所有受支持的有效負載定義一個通用基類,並具有例如:
[XmlInclude(typeof(MusicAlbum))] // etc other types...
public abstract class PayloadBase {}
public class MusicAlbum : PayloadBase
{
public string AlbumName { get; set; }
public string ArtistName { get; set; }
}
public class ObjectCarrier
{
public PayloadBase PayloadObject { get; set; }
}
順便說一句,有些API支持CF上的二進制文件。 protobuf-net只是其中之一(我偏向作者-但是,它是免費的...)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.