0

以下のコードを使用して指紋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が参照されているため、変更できません

4

2 に答える 2

1

アップデート

クラスにアクセスできない場合は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>場合、それが問題を引き起こすかどうかを知ることは不可能です。

于 2013-01-11T16:09:13.237 に答える
1

Coryのおかげで、それは有用な答えですが、この例では、を使用してシリアル化する別の方法があります

tempFingerPrint = Fmd.SerializeXml(resultConversion.Data);

これはDigitalPersonaSDKに固有です

于 2013-01-12T10:03:40.727 に答える