Oprava: Objekty nelze serializovat správně při serializaci a deserializaci objektech DataSet pomocí parametru formát SerializationFormat.Binary aplikace založené na rozhraní .NET Framework 2.0

Překlady článku Překlady článku
ID článku: 948646 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud se jiné aplikace založené na rozhraní .NET Framework 2.0 společnosti Microsoft se snaží serializovat a objektech DataSet rekonstruovat pomocí parametru SerializationFormat.Binary formátu, objekty serializovat správně.

Příčina

K tomuto problému dochází z důvodu chyby v souboru System.Design.dll.

Řešení

Informace o opravě hotfix

Má nyní od společnosti Microsoft k dispozici podporovanou opravu hotfix. Že je však určena pouze tento článek popisuje problém. Použijte ji pouze v systémech, ve kterých dochází k tomuto konkrétnímu problému.

Potřebujete-li tento problém odstranit, obraťte se na technickou podporu společnosti Microsoft, kde můžete tuto opravu hotfix získat. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách podpory naleznete na následujícím webu společnosti Microsoft:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Ve zvláštních případech mohou být poplatky za poskytnutí telefonické podpory účtovány stornovány, jestliže pracovník technické podpory společnosti Microsoft určí, že konkrétní aktualizace vyřeší váš problém. Výdaje na podporu se obvykle týkají dalších otázek a problémů, které se netýkají této zvláštní opravy.

Požadavky

Je nutné nainstalovat tuto opravu hotfix po instalaci rozhraní .NET Framework 2.0.

Požadavek na restartování

Není nutné po instalaci této opravy hotfix restartovat počítač.

Informace o nahrazení opravy hotfix

Tato oprava hotfix nenahrazuje žádné další opravy hotfix.

Informace o souboru

Anglická verze této opravy hotfix má atributy souborů (nebo vyšší atributy souborů), jsou uvedeny v následující tabulce. Data a časy těchto souborů jsou uvedeny v koordinovaný světový čas (UTC). Při zobrazení informací o souboru, bude převedena na na místní čas. Rozdíl mezi místním časem a UTC časem kartě časové pásmo v položce datum a čas v Ovládacích panelech.
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
System.design.dll2.0.50727.18155,046,27227. Února 200811: 47x 86

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části „ platí.

Kroky pro reprodukci problému

  1. Vytvoření nové aplikace konzoly s názvem "ConsoleAppTestDTset".
  2. Vytvořit novou položku DataSet s názvem "DsTest.xsd".
  3. Přidat tabulku typu objektu DataTable s názvem "dtTest".
  4. Přidat dva sloupce, které jsou pojmenovány col1 a col2 do tabulky. Ujistěte se, že datové typy jednotlivých sloupců nastaven k System.Int32.
  5. Nastavte následující výraz "sloupec 2":
    col1 * 2
  6. V metodě hlavní vložte následující kód:
    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();
            }
    When you run the application, the expression string is not displayed in the Output Window as expected.
  7. V souboru DsTest.Designer.cs, vyhledejte následující kód:
    [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. Nahradit tento kód pomocí následující kód:
    [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;
       }
    ...
    
    uložit a znovu spusťte aplikaci, výraz řetězec zobrazený v okně výstupu.
Poznámka: Pokud upravíte objektu DataSet a pak znovu sestavit aplikaci, zmizí kód, který jste přidali v kroku 8.

Další informace o objektech DataSet Binární serializace naleznete na webu Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/magazine/cc163911.aspx
Další informace o terminologii aktualizace softwaru naleznete následující článku znalostní báze Microsoft Knowledge Base:
824684Popis standardní terminologie používané k popisu aktualizací softwaru společnosti Microsoft

Vlastnosti

ID článku: 948646 - Poslední aktualizace: 15. dubna 2008 - Revize: 1.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 2.0
Klíčová slova: 
kbmt kbpubtypekc kbqfe kbhotfixserver kbexpertiseadvanced KB948646 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:948646

Dejte nám zpětnou vazbu

 

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