簡體   English   中英

c#中的xml序列化錯誤 - 無參數構造函數

[英]Error with xml serialization in c# - paramaterless constructor

我正在嘗試使用下面的代碼將指紋FMD序列化為XML,但是收到錯誤:

錯誤:DPUruNet.DataResult`1 [DPUruNet.Fmd]無法序列化,因為它沒有無參數構造函數。

  public void storePrint(DataResult<Fmd> resultConversion)
        {
                //store fingerprint as byte and insert to server------------
                 using (StreamWriter myWriter = new StreamWriter("test.txt", false))
                {

                    System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(resultConversion.GetType());
                    x.Serialize(myWriter, resultConversion);
                }
                MessageBox.Show("Fingerprint Stored!");

                //------------------------------------------------------------
        }
        private void OnCaptured(CaptureResult captureResult)
        {
            try
            {
                // Check capture quality and throw an error if bad.
                if (!_sender.CheckCaptureResult(captureResult)) return;

                count++;

                DataResult<Fmd> resultConversion = FeatureExtraction.CreateFmdFromFid(captureResult.Data, Constants.Formats.Fmd.ANSI);

                SendMessage(Action.SendMessage, "A finger was captured.  \r\nCount:  " + (count));

                if (resultConversion.ResultCode != Constants.ResultCode.DP_SUCCESS)
                {
                    _sender.Reset = true;
                    throw new Exception(resultConversion.ResultCode.ToString());
                }

                preenrollmentFmds.Add(resultConversion.Data);
                //--------------------CALL METHOD
                storePrint(resultConversion);
                //

正在引用類DataResult,所以我不能改變它

UPDATE

如果您無法訪問DataResult<T>類,則可能需要采用稍微不同的方法,並使用不同的可序列化類來包裝此類。 你可以在這里找到一個完整的例子:


上一個答案

錯誤很明顯; 您只需DataResult<T>類添加無參數構造函數:

public class DataResult<T>
{
    // Add a default constructor (public visibility, no parameters)
    public DataResult() 
    {
        // You can still define a method body if you wish,
        // no restrictions there. Just don't do anything that
        // could jeopardize the (de)serialization.
    }
}

至於添加默認構造函數的含義,不知道是什么

FeatureExtraction.CreateFmdFromFid(...)

正在創建DataResult<Fmd> ,不可能知道它是否會導致任何問題。

感謝Cory,這是一個有用的答案,但是在這個例子中還有另一種序列化使用方法

tempFingerPrint = Fmd.SerializeXml(resultConversion.Data);

這是Digital Persona SDK特有的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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