problem z Serializacja EF

0

Staram się zserializować obiekt EF. Ale pojawia mi się błąd że nie można . Staram się to zrobić w taki sposób

 private void serializacjaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (biblioteczkaEntities polaczenie = new biblioteczkaEntities())
            {

                XmlRootAttribute oRootAttr = new XmlRootAttribute();
                oRootAttr.ElementName = "Książka";
                //oRootAttr.IsNullable = true;

                XmlSerializer oSerializer = new XmlSerializer(typeof(List<Ksiażka>), oRootAttr);

                StreamWriter oStreamWriter = null;

                try
                {
                    List<Ksiażka> ksiazki = polaczenie.Ksiażka.ToList();
                    oStreamWriter = new StreamWriter("ksiazki.xml");
                    oSerializer.Serialize(oStreamWriter, ksiazki);
                }
                catch (Exception oException)
                {
                    Console.WriteLine("Aplikacja wygenerowała następujący wyjątek: " + oException.Message);
                }
                finally
                {
                    if (null != oStreamWriter)
                    {
                        oStreamWriter.Dispose();
                    }
                }
            }

A moja klasa Ksiażka :

namespace Biblioteczka
{
    using System;
    using System.Collections.Generic;
    using System.Xml.Serialization;

    [Serializable]
    public partial class Ksiażka : IComparable<Ksiażka>
    {

        public int Id_ksiazki { get; set; }

        public string Tytuł { get; set; }

        public Nullable<short> Liczba_stron { get; set; }

        public Nullable<bool> Druk { get; set; }

        public Nullable<bool> Pdf { get; set; }

        public Nullable<bool> Mobi { get; set; }

        public Nullable<bool> Epub { get; set; }

        public Nullable<bool> Przeczytana { get; set; }

        [XmlIgnore]
        public virtual Autor Autor { get; set; }
        [XmlIgnore]
        public virtual Kategoria Kategoria { get; set; }
        [XmlIgnore]
        public virtual Wydawnictwo Wydawnictwo { get; set; }

        public int CompareTo(Ksiażka jaka)
        {
            return this.Tytuł.CompareTo(jaka.Tytuł);
        }
    }
} 

Można w taki sposób serializować bo szukajac w google spotkałem się tylko z JSON .

0

może np. podasz DOKŁADNĄ treść błędu

0

Po co tak: Nullable<bool>, a nie tak: bool??

0
  w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   w System.Threading.ThreadHelper.ThreadStart()</ExceptionString><InnerException><ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Nie oczekiwano typu System.Data.Entity.DynamicProxies.Ksiażka_2324992115B514E3621385C7D6B56009C349083F6D0553B3A77D10DAA807CB9F. Użyj atrybutu XmlInclude lub elementu SoapInclude, aby określić typy, które nie są podane statycznie.</Message><StackTrace>   w Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write2_Ksiażka(String n, String ns, Ksiażka o, Boolean isNullable, Boolean needType)
   w Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write3_Książka(Object o)</StackTrace><ExceptionString>System.InvalidOperationException: Nie oczekiwano typu System.Data.Entity.DynamicProxies.Ksiażka_2324992115B514E3621385C7D6B56009C349083F6D0553B3A77D10DAA807CB9F. Użyj atrybutu XmlInclude lub elementu SoapInclude, aby określić typy, które nie są podane statycznie.
   w Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write2_Ksiażka(String n, String ns, Ksiażka o, Boolean isNullable, Boolean needType)
   w Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterList1.Write3_Książka(Object o)</ExceptionString></InnerException></Exception></TraceRecord>

A co do Nullable<bool> było automatycznie generowane przez Visual Studio jak tworzyłem Data Object.

Próbowałem też tak ale ten sam efekt

[Serializable]
    public partial class Ksiażka : IComparable<Ksiażka>
    {
        [XmlAttribute("Id")]
        public int Id_ksiazki { get; set; }
        [XmlElement("Tytuł")]
        public string Tytuł { get; set; }
        [XmlIgnore]
        public Nullable<short> Liczba_stron { get; set; }
        [XmlIgnore]
        public Nullable<bool> Druk { get; set; }
        [XmlIgnore]
        public Nullable<bool> Pdf { get; set; }
        [XmlIgnore]
        public Nullable<bool> Mobi { get; set; }
        [XmlIgnore]
        public Nullable<bool> Epub { get; set; }
        [XmlIgnore]
        public Nullable<bool> Przeczytana { get; set; }

        [XmlIgnore]
        public virtual Autor Autor { get; set; }
        [XmlIgnore]
        public virtual Kategoria Kategoria { get; set; }
        [XmlIgnore]
        public virtual Wydawnictwo Wydawnictwo { get; set; }

        public int CompareTo(Ksiażka jaka)
        {
            return this.Tytuł.CompareTo(jaka.Tytuł);
        }
    } 
0

Problem rozwiązany

polaczenie.Configuration.ProxyCreationEnabled = false; 

Mylił mnie e.Message a nie zobaczyłem bardziej w błąd debuggera na temat

 System.Data.Entity.DynamicProxies

Sorki za problem.

Jak by ktoś wiedział jak przy serializacji książki zaserializować tylko id_autora byłbym wdzięczny za sugestie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1