簡體   English   中英

緊湊框架3.5上的XmlSerialization問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM