UPDATE: Objekte werden bei Serialisieren und das DataSet Objekte von dem Werden bei deserialisiert, indem Sie bei einem .NET Anwendung von Framework 2.0-based den SerializationFormat.Binary-Formatparameter verwenden, korrekt nicht serialisiert

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 948646 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn ein Microsoft .NET Anwendung von Framework 2.0-Based versucht, serialisiert zu werden und Deserialisieren des DataSet Objekte, indem ein Microsoft .NET Anwendung von Framework 2.0-based den SerializationFormat.Binary Formatparameter verwendet, werden die Objekte korrekt nicht serialisiert.

Ursache

Dieses Problem tritt aufgrund eines Fehlers in der System.Design.dll-Datei auf.

Lösung

Hotfix-Information

Ein unterstütztes Hotfix ist jetzt von Microsoft verfügbar. Nur das Problem zu beheben, das in diesem Artikel beschrieben wird ist jedoch vorgesehen. Gelten Sie es nur für Systeme, bei denen dieses spezielle Problem auftritt.

Wenden Sie sich an Microsoft Customer Support Services, um das Hotfix zu erhalten, wenn Sie dieses Problem beheben möchten. Besuchen Sie für eine vollständige Liste von Microsoft Customer Support Services Telefonnummern und Information über Supportkosten das folgende Website von Microsoft:
http://support.microsoft.com/contactus/?ws=support
Hinweis: wenn Microsoft Support-Experte feststellt, dass sich Ihr Problem durch ein spezielles Update lassen wird, dass sich Beheben behebt, können Gebühren, die normalerweise für Supportanrufe anfallen, in bestimmten Fällen erlassen werden. IT DOES NOT APPLY TO GERMANY

Voraussetzungen

Sie müssen über das FRAMEWORK 2.0 verfügen, um zu installiert, um dieses Hotfix anzuwenden.

Starten Sie neu Anforderung

Nachdem Sie dieses Hotfix installieren, müssen Sie den Computer nicht neu starten.

Hotfix-Ersatzinformation

Dieser Hotfix ersetzt keine anderen Hotfixes

Dateiinformation

Die englische Version dieses Hotfixes weist die Dateiattribute ( oder die späteren Dateiattribute) auf die in der folgenden Tabelle aufgeführt ist. Die Datumangaben und die Uhrzeit-Angaben für diese Dateien sind in UTC angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert Verwenden Sie bei dem Element Datum und Uhrzeit in Systemsteuerung die Registerkarte Zeitzone, um den Unterschied zwischen UTC und lokaler Zeit zu suchen.
Tabelle minimierenTabelle vergrößern
DateinamDateiversionDateigrößeDatuUhrzeiPlattform
System.design.dll2.0.50727.18155,046,27227-Feb-200811 : 47X

Status

Microsoft hat bestätigt, dass es sich dabei, um ein Problem bei den Microsoft-Produkten, die in dem Abschnitt "Betrifft" aufgeführt sind, handelt.

Schritte zu Reproduzieren des Problems

  1. Erstellen Sie eine neue Konsole-Anwendung, die als "ConsoleAppTestDTset" bezeichnet wird
  2. Erstellen Sie ein neues DataSet-Element, das als "DsTest.xsd" bezeichnet wird
  3. Fügen Sie eine DataTable-Typentabelle mit Name "DtTest" hinzu
  4. Spalten von Add two mit Name Col1 und Col2 zu der Tabelle. Stellen Sie sicher, dass Int32 für den Datentypen jeder Spalte festgelegt ist.
  5. Legen Sie auf "Cols 2" den folgenden Ausdruck fest:
    col1 * 2
  6. Fügen Sie in der Hauptmethode den folgenden Code ein:
    static void Main(string[] args)
            {
                // Create a dataset instance.
                DataSet ds = new DsTest();
                // Add a row.
                ds.Tables["dtTest"].Rows.Add(1);
                ds.Tables["dtTest"].Rows.Add(2);
                ds.Tables["dtTest"].Rows.Add(3);
                // Show rows to see that the expression works
                foreach (DataRow dr in ds.Tables["dtTest"].Rows)
                {
                    Console.WriteLine("col1: {0}, col2: {1}", dr[0], dr[1]);
                }
                Console.WriteLine("Expression = " + ds.Tables["dtTest"].Columns["col2"].Expression);
                Console.WriteLine();
                // Do the serialization or the deserialization.
                byte[] serializedDS;
                ds.SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema;
                // Using SerializationFormat.Binary fails.
                ds.RemotingFormat = SerializationFormat.Binary;
                // Using SerializationFormat.Xml works.
                //ds.RemotingFormat = SerializationFormat.Xml;
                
                // Serialize.
                MemoryStream ms = new MemoryStream();
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(ms, ds);
                serializedDS = ms.ToArray();
    
                // Deserialize.
                ms.Write(serializedDS, 0, serializedDS.Length);
                                         ms.Position = 0;
                DataSet newDs = (DataSet)bf.Deserialize(ms);
                // Display the deserialized dataset.
                foreach (DataRow dr in newDs.Tables["dtTest"].Rows)
                {
                    Console.WriteLine("col1: {0}, col2: {1}", dr[0], dr[1]);
                }
                Console.WriteLine("Expression = " + newDs.Tables["dtTest"].Columns["col2"].Expression);
                Console.WriteLine();
    
                Console.WriteLine("Done..!");
                Console.Read();
            }
    Wenn Sie die Anwendung ausführen, wird die Zeichenfolge des Ausdrucks nicht erwartet in dem Ausgabenfenster angezeigt.
  7. Suchen Sie in der DsTest.Designer.cs-Datei den folgenden Code:
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]protected DsTest(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context, false) 
    {
       if ((this.IsBinarySerialized(info, context) == true)) 
       {
          this.InitVars(false);   
          System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);   
          this.Tables.CollectionChanged += schemaChangedHandler1;   
          this.Relations.CollectionChanged += schemaChangedHandler1;   
          return;
       }
    ...
    
  8. Ersetzen Sie diesen Code, indem Sie den folgenden Code verwenden:
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]protected DsTest(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context, false) 
    {
       if ((this.IsBinarySerialized(info, context) == true)) 
       {
          this.InitVars(false);   
          System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);   
          this.Tables.CollectionChanged += schemaChangedHandler1;   
          this.Relations.CollectionChanged += schemaChangedHandler1;
     
          // These two lines are the only new ones.
          if ((this.DetermineSchemaSerializationMode(info, context) == System.Data.SchemaSerializationMode.ExcludeSchema))      
             this.InitExpressions();
     
          return;
       }
    ...
    
    Wenn Sie die Anwendung speichern und wenn erneut ausführen, wird in dem Ausgabenfenster die Zeichenfolge des Ausdrucks angezeigt.
Hinweis: der Code, den Sie in Schritt 8 hinzufügten, verschwindet, wenn Sie das DataSet Objekt ändern und wenn die Anwendung neu dann erstellen.

Findet mehreres Weitere Informationen über binäres Serialisierung des DataSet Objekte auf der folgenden Microsoft Developer Network ( MSDN )-Website:
http://msdn2.microsoft.com/en-us/magazine/cc163911.aspx
Aktualisieren Sie für Weitere Informationen zu Software Terminologie, klicken Sie auf die folgende Artikelanzahl, den Artikel der Microsoft Knowledge Base zu lesen:
824684 Beschreibung der Standardterminologie, die zu dem Beschreiben von Softwareupdates von Microsoft verwandt wird

Eigenschaften

Artikel-ID: 948646 - Geändert am: Dienstag, 15. April 2008 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework 2.0
Keywords: 
kbpubtypekc kbqfe kbhotfixserver kbexpertiseadvanced KB948646 KbMtde kbmt
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 948646
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com