0

XMLSerializationを使用して、クライアントベースのWin7アプリケーションからサーバー(Server 2008 R2)にパイプ通信プロセスを介してデータを渡します。私はそれを放棄した前の開発者の努力を終えるためにこのプロジェクトに連れてこられました...したがって、私は現在、動作しないVS2010のC#コードを修正しようとしています。

問題は、「パブリック部分クラステスト」にある次のメソッドから結果の出力の完全なシリアル化を取得できないことです。以下の各項目に一致するMSCompactServerデータベース(「Test」という名前)にテーブルが定義されており、両方のテーブルの一致するTestIDに基づいて、「Channel」テーブルへのFKがあります。EntityCollectionは、「チャネル」テーブルとの関係に基づいています。

public Test(Guid TestID, String TestName, String TestRemarks, String ScriptPath,
            EntityCollection<Channel> TChannels)
{
    ID = TestID;
    Name = TestName;
    Remarks = TestRemarks;
    Path = ScriptPath;
    Channels = TChannels;
}

これは、メソッドの実行でどのように使用されるかのサンプルです。

Test T = new Test(NewID, "Test1", "Test_120912-1729",
            "C:\\Temp\\TestScript_16.txt", TChannels);

シリアル化プロセスの結果は次のとおりです。

<DataCore xsi:type="Test">
  <ID>bc6a8ef7-c31f-404d-8108-86219d45be63</ID>
  <Name>Test1</Name>
  <Remarks>Test_120912-1729</Remarks>
  <Path>C:\Temp\TestScript_16.txt</Path>
</DataCore>

最初の4つのパラメーターは正常にシリアル化されますが、最後のパラメーター(EntityCollection)はシリアル化に失敗します。ただし、「TChannels」を単独で(「Test」機能の外で)シリアル化しようとすると、各テストチャネルのシリアル化は完全に機能します。この問題を解決するためにXMLシリアル化を利用するための制限/要件を完全には理解していません。関数内からEntityCollection<>をシリアル化できないのはなぜですか?

ご協力ありがとうございます!

4

1 に答える 1

0

私はついに上記の問題の解決策を見つけました。多くの提案は高く評価されましたが、子EntityCollectionをXmlSerializeできないという解決策を提供するものはありませんでした。深く掘り下げてADO.NETFrameworkを調べたところ、データベースModel.Designer.csファイルの自動生成されたコード内で、テストのナビゲーションプロパティ(EdmEntityTypeAttribute)の先頭近くにある[XmlIgnoreAttribute()]が見つかりました。

[XmlIgnoreAttribute()]行を完全に削除しただけで、EntityCollection<>の「Channels」のすべての子オブジェクトが正しくシリアル化されました。これが、子オブジェクトをシリアル化できない他のユーザーにも役立つことを願っています。

@DaveRに感謝します。

于 2012-09-17T23:16:15.583 に答える