2010-12-01 1 views
2

SQL Server Compact(SQL CE)データベースにいくつかのオブジェクトをSOAPフォーマッタでシリアル化して保存しようとしています。シリアライズはうまく動作するようだが、私は、オブジェクトを逆シリアル化しようとしたとき、私はSQL Server Compactから逆シリアル化すると、 "閉じられていないリテラル文字列があります。"エラー

There is an unclosed literal string. Line 53, position 72.

を言ってエラーが出るさらに、データセットを埋めるためにしようとする上でアプリケーションを再起動した後、私は次のエラーを取得する:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

私のすべての列(IDを除く)はヌル値を許しており、一意ではないため、どこから来るのか分かりません。ここに私のシリアライザのコードは次のとおりです。ここで

public static class Serializer 
{ 
    static public string Serialize(AssessmentReport theObject) 
    { 
     MemoryStream mStream = new MemoryStream();    
     SoapFormatter formatter = new SoapFormatter(); 
     formatter.Serialize(mStream, theObject); 
     byte[] buffer = mStream.ToArray(); 
     mStream.Close(); 
     string value = Encoding.UTF8.GetString(buffer); 
     return value; 
    } 

    static public AssessmentReport Deserialize(string value) 
    { 
     byte[] buffer = Encoding.UTF8.GetBytes(value); 
     MemoryStream mStream = new MemoryStream(buffer); 
     SoapFormatter formatter = new SoapFormatter(); 
     mStream.Position = 0; 
     AssessmentReport theReport = (AssessmentReport)formatter.Deserialize(mStream); 
     mStream.Close(); 
     return theReport; 
    } 
} 

は、私は(theReportをシリアル化するオブジェクトのインスタンスである)シリアライザを呼び出す方法です:

examTableAdapter.UpdateAsmFile(Serializer.Serialize(theReport), examID); 

そして、ここでは、私が呼び出しています方法ですデシリアライズ方法:

string value = Convert.ToString(examTableAdapter.GetAsmFile(2)); 
AsmReport theReport = Serializer.Deserialize(value) 
文字列が保存されているSQL Serverのコンパクトなデータベースのフィールドが3500の限界とタイプ nvarcharである

私はバイナリフォーマッタを使ってみましたが、シリアル化すると常に空のbyte []バッファが返されるようです。私は本当に深いシリアライズが必要です。そのため、XMLシリアライザは問題になりません。

+2

シリアライズされた文字列が3500文字の上限を超えていないことを確認しましたか? SOAP表現はかなり大きくなる可能性があります。 –

+0

ストリームで.Flush()を呼び出してからバイト配列に変換します。それはおそらく可能性があります。 –

+0

Deserializeメソッドに渡す "value"パラメータをチェックしていますか?それはどのように見えるのですか? –

答えて

1

これで私は今2ヶ月以上を把握しようとしています。 問題を論理的に解決できないうちに、エンコードをutf7に変更すると問題が解決されたようです。私はこれが問題になる理由を考えることはできませんが、私のマシンに固有のようです(私は最終的に別のコンピュータでコードを実行する機会があり、utf8で完全に機能しました)。