1
      private string DeSerialize(string studata)
    {
        dcs= new DataContractSerializer(typeof(string));
        try
        {
            using (var q = new StringReader(studata))
            {
                using (XmlReader reader = XmlReader.Create(sr))
                {
                   var k = dcs.ReadObject(reader);
                    return k.ToString();
                }
            }
        }
        catch
         {}
        return string.Empty;
    }

上記のメソッドを使用すると、ランタイムエラー「1行目の41行目のエラー。名前空間'http://schemas.microsoft.com/2003/10/Serialization/'から要素'string'が必要です。..'Element'Studentnamespaceに遭遇しました。

4

1 に答える 1

6

何かをシリアル化するときは、オブジェクトをXML、JSONなどの表現にシリアル化します。表現がバイナリでない場合は、シリアル化の結果を文字列に格納できます。

あなたのコードは文字列を取得し、それを文字列に逆シリアル化しようとしています。それは意味がありません。

この線

dcs= new DataContractSerializer(typeof(string));

デシリアライズするシリアル化されたオブジェクトのタイプが文字列型であることを示します。それはおそらくあなたが意図したことではありません。

に変更typeof(string)typeof(WhateverTypeIPreviouslySerialized)ます。

また、の戻りタイプはDeSerializeですstring。それもそうあるべきWhateverTypeIPreviouslySerializedです。

コアの質問とは関係なく、私は空のキャッチを指摘します

    catch
     {}

悪い習慣です。スローされ、処理する必要のある例外をマスクします。シリアル化が失敗したときに特定の値を返したい場合は、その値をcatchステートメント内に入れてください。

于 2012-07-11T00:26:48.063 に答える