2

Google APIのGData「イベント」オブジェクトをデータブルに保存しています(オブジェクトとしてキャストする必要がありました。そうしないと、イベントにアクセスできませんでした)。イベントのすべてのプロパティに完全にアクセスして、 Googleを更新するためにそれらを使用しますが、次の理由により、データテーブル(または親データセット)をファイルにシリアル化できません。

タイプ「Google.GData.Calendar.EventEntry、Google.GData.Calendar、Version = 1.4.0.2、Culture = neutral、PublicKeyToken = aa6748391206b888」はIXmlSerializableインターフェースを実装していないため、シリアル化を続行できません。

これは、単純にXMLまたはバイナリとしてシリアル化しようとしても発生しますが、問題を回避する方法を見つけることができません。何らかの方法でデータ構造をファイルに保存することはできませんか?

コンテキストを設定するために、私は元々GData EventFeedをXMLとして保存していましたが、Google APIのmyEventFeed.saveToXMLを使用して理解するのに約30秒かかり、後でリロードするだけだと思っていました...xmlの取得に2日を費やしましたEventFeedオブジェクトに戻り、代わりにEventFeedからデータテーブルにEventEntryを保存するように切り替えました。

そのため、フィードをXML 1.0に簡単に保存できましたが、GData EventFeedに読み戻すのは別の話でした-GoogleはmyFeed.saveToXMLを提供しますが、loadfromXMLメソッドは提供しません:-/したがって、System.Runtime.Serializationを追加しようとしました。次のようなものを使用するには:

Dim reader As XmlReader = XmlReader.Create(fileName)Dim rssFeed As SyndicationFeed = SyndicationFeed.Load(reader)

これは最初は有望に見えましたが、データがすべてrssFeedにあるわけではありません。さらに、必要なメソッドを呼び出す前に、データをGoogle.GData.Calendar.EventFeedに戻す必要があります。どちらかを行う方法を理解します。rssFeedから新しいEventEntryにデータの最も重要なビットをコピーするか、重要なデータを抽出することでデータテーブルで同じことを行うことができると思います...しかし、それは非常にエレガントではなく、将来的には危険です。

私が今どちらの方向に向けるべきかという考えはありますか?私は間違った木を吠えていますか?

ありがとう、ニール

VB .NET 3.5 VS 2008

4

2 に答える 2

2

シリアル化したくないオブジェクトがある場合、それをシリアル化する方法はありません。

これは、シリアル化するオブジェクトを作成する必要があることを意味します。実際のクラスのプロキシとして機能するXMLシリアル化可能なクラスを作成します。プロキシには、シリアル化された状態で表示する元のクラスの各プロパティに対応するシリアル化可能なプロパティがあります。

public class Original
{
    private string _property1;
    private int _property2;

    public string Property1
    {
        get { return _property1; }
    }

    public int Property2
    {
        get { return _property2; }
    }
}

public class ProxyToOriginal
{
    private readonly Original _original;

    public ProxyToOriginal(Original original)
    {
        _original = original;
    }

    public string Property1
    {
        get { return _original.Property1; }
        set {  }
    }

    public int Property2
    {
        get { return _original.Property2; }
        set { }
    }
}
于 2010-02-28T18:52:00.717 に答える
1

この質問に出くわした他の人にとって、GDataXMLのシリアル化/逆シリアル化の問題に対する答えを見つけたと思います。OPと同様のことを試みましたが、EventFeedがシリアル化されなかったため、SaveToXMLメソッドを使用しましたが、OPが述べたように、LoadFromXMLメソッドはありません。私はついにParse()メソッドを見つけました。これは機能します:

        //first write the string to a file
        List<EventEntry> eventList = new List<EventEntry>();

        EventQuery query = new EventQuery(feed);
        AtomFeed eventFeed = _service.Query(query) as AtomFeed;
        XmlWriter writer = new XmlTextWriter("test.xml", new UTF8Encoding());

        eventFeed.SaveToXml(writer);
        writer.Close();

        //next, parse the string from the file
        Stream newFs = new FileStream("test.xml", FileMode.Open);

        AtomFeed newFeed = new AtomFeed(new Uri("http://someURI"), null);
        newFeed.Parse(newFs, AlternativeFormat.Atom);
        newFs.Close();
于 2010-10-28T23:34:35.677 に答える