FIX: Objecten zijn niet geserialiseerd correct wanneer serialiseren en deserialize DataSet-objecten met de parameter SerializationFormat.Binary indeling in een.NET Framework 2.0-toepassing

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 948646 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Als een Microsoft.NET Framework 2.0-toepassing probeert te serialiseren en terugDataSetobjecten met deSerializationFormat.BinaryOpmaak parameter geserialiseerde objecten zijn niet correct.

Oorzaak

Dit probleem treedt op vanwege een fout in het bestand System.Design.dll.

Oplossing

Informatie over hotfixes

Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter bedoeld om alleen het probleem dat wordt beschreven. Gelden alleen voor systemen waarop dit specifieke probleem.

Dit probleem oplossen door contact op met Microsoft Customer Support Services om de hotfix te verkrijgen. Bezoek de volgende Microsoft-website voor een volledige lijst met telefoonnummers van Microsoft Customer Support Services en informatie over ondersteuningskosten:
http://support.Microsoft.com/contactus/?ws=support
OpmerkingIn speciale gevallen kunnen kosten die normaal verbonden worden geannuleerd als een medewerker van Microsoft bepaalt dat een specifieke update de oplossing van uw probleem. De gebruikelijke ondersteuningskosten gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.

Vereisten

U moet de.NET Framework 2.0 is geïnstalleerd om deze hotfix.

Opnieuw opstarten

U hebt de computer opnieuw opstarten nadat u deze hotfix.

Vervanging van hotfixes

Deze hotfix vervangt geen andere hotfixes.

Bestandsgegevens

De Engelse versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Het verschil tussen UTC en lokale tijd, gebruikt u deTijdzonetabblad in deDatum en tijditem in het Configuratiescherm.
Deze tabel samenvouwenDeze tabel uitklappen
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.design.dll2.0.50727.18155,046,27227 Februari 200811: 47x 86

Status

Microsoft heeft bevestigd dat dit probleem in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op' is.

Stappen om het probleem te reproduceren

  1. Maak een nieuwe consoletoepassing genaamd 'ConsoleAppTestDTset'.
  2. Een nieuwe gegevensset maken met de naam 'DsTest.xsd'.
  3. Toevoegen van een DataTable Typetabel met de naam 'dtTest'.
  4. Twee kolommen met Kol1 en Kol2 aan de tabel toevoegen. Controleer of het gegevenstype van elke kolom is ingesteld opSystem.Int32.
  5. De volgende expressie 'Kol 2' instellen:
    Kol1 * 2
  6. Voeg de volgende code in de belangrijkste methode:
    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();
            }
    Wanneer u de toepassing uitvoert, wordt de expressietekenreeks niet weergegeven in het venster uitvoer zoals verwacht.
  7. Zoek in het bestand DsTest.Designer.cs de volgende 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. Deze code vervangen door de volgende 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;
     
          // These two lines are the only new ones.
          if ((this.DetermineSchemaSerializationMode(info, context) == System.Data.SchemaSerializationMode.ExcludeSchema))      
             this.InitExpressions();
     
          return;
       }
    ...
    
    Wanneer u opslaan en opnieuw de toepassing, wordt de expressietekenreeks weergegeven in het venster uitvoer.
OpmerkingAls u wijzigt deDataSetobject en vervolgens opnieuw de toepassing toegevoegd in code stap 8 verdwijnt.

Voor meer informatie over binaire serialisatie vanDataSetobjecten, Ga naar de volgende website van Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/Magazine/cc163911.aspx
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over terminologie voor software-update:
824684Beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven
Opmerking Dit is een artikel voor snelle publicatie dat rechtstreeks is gemaakt vanuit de ondersteuningsorganisatie van Microsoft. De informatie in dit artikel wordt in de huidige vorm aangeboden in reactie op nieuw geconstateerde problemen. Aangezien artikelen van dit type zeer snel moeten worden gepubliceerd, kan de inhoud typografische fouten bevatten en kan de inhoud zonder voorafgaande kennisgeving worden gewijzigd. Raadpleeg de Gebruiksrechtovereenkomst voor overige aandachtspunten.

Eigenschappen

Artikel ID: 948646 - Laatste beoordeling: zaterdag 19 maart 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft .NET Framework 2.0
Trefwoorden: 
kbqfe kbexpertiseadvanced kbmt KB948646 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:948646

Geef ons feedback

 

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