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

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
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: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.
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):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
DataSet VS 2005 serialisatie expressie SerializationFormat ExcludeSchema MSDataSetGenerator InitExpressions
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.

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 948646 - Laatst bijgewerkt: 03/19/2011 08:47:00 - Revisie: 2.0

Microsoft .NET Framework 2.0

  • kbqfe kbexpertiseadvanced kbmt KB948646 KbMtnl
Feedback