SortExpression serialization error

Posts   
 
    
MarcoW
User
Posts: 4
Joined: 24-Jul-2008
# Posted on: 24-Jul-2008 12:05:15   

Might be a newbee question but couldn't find anything on the forums.

SortExpression is marked as Serializable.

[DefaultMemberAttribute("Item")]
[SerializableAttribute()]
public class SortExpression : CollectionBase, ISortExpression  

However when i try to serialize it like so:

XmlSerializer s = new XmlSerializer(typeof(SortExpression));
s.Serialize(someWriter, someSortExpression);

I get an error ISortClause isn't serializable.

System.NotSupportedException: Cannot serialize interface SD.LLBLGen.Pro.ORMSupportClasses.ISortClause

Am i missing something?

TIA

Marco

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 24-Jul-2008 14:40:25   

Which llblgen pro runtime library version are you using?

MarcoW
User
Posts: 4
Joined: 24-Jul-2008
# Posted on: 24-Jul-2008 15:11:28   

I knew i forgot something. Sorry about that.

Using: SD.LLBLGen.Pro.ORMSupportClasses.NET20.dll version 2.6.08.0624

For completeness, here's all the code:

public static class SortExpressionExtensions
    {
        public static string WriteXml(this SortExpression sortExpression)
        {
            string xml = string.Empty;
            using (TextWriter w = new StringWriter())
            {
                XmlSerializer s = new XmlSerializer(typeof(SortExpression));
                s.Serialize(w, sortExpression);
                w.Flush();
                xml = w.ToString();
                w.Close();
            }
            return xml.Trim();
        }
    }

When i'm using it like:

protected void MainLLBLGenProDataSource2_PerformSelect(object sender, SD.LLBLGen.Pro.ORMSupportClasses.PerformSelectEventArgs2 e)
        {
            SortExpression se = new SortExpression();

            foreach (ISortClause sc in e.Sorter)
                se.Add(new SortClause(sc.FieldToSortCore, sc.PersistenceInfo, sc.SortOperatorToUse, sc.ObjectAlias));

            string sXml = se.WriteXml();
        }

The error is at line:

XmlSerializer s = new XmlSerializer(typeof(SortExpression));

Walaa avatar
Walaa
Support Team
Posts: 14993
Joined: 21-Aug-2005
# Posted on: 24-Jul-2008 15:48:24   

SortExpression se = new SortExpression(); ... string sXml = se.WriteXml();

How come the WriteXml() in the above code calls "SortExpressionExtensions.WriteXml()" ?

MarcoW
User
Posts: 4
Joined: 24-Jul-2008
# Posted on: 24-Jul-2008 15:58:38   

It's a C# extension method. Code below is without. Error also occurs.

protected void MainLLBLGenProDataSource2_PerformSelect(object sender, SD.LLBLGen.Pro.ORMSupportClasses.PerformSelectEventArgs2 e)
        {
            SortExpression se = new SortExpression();

            foreach (ISortClause sc in e.Sorter)
                se.Add(new SortClause(sc.FieldToSortCore, sc.PersistenceInfo, sc.SortOperatorToUse, sc.ObjectAlias));

            string sTempXml = string.Empty;
            using (TextWriter w = new StringWriter())
            {
                XmlSerializer s = new XmlSerializer(typeof(SortExpression));
                s.Serialize(w, se);
                w.Flush();
                sTempXml = w.ToString();
                w.Close();
            }
            string sXml = sTempXml.Trim();
        }
daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 25-Jul-2008 08:21:27   

SortExpression isn't serializable to XML, as it's hard to deserialize the entity field from just the data.

David Elizondo | LLBLGen Support Team
MarcoW
User
Posts: 4
Joined: 24-Jul-2008
# Posted on: 25-Jul-2008 14:58:06   

Yes, I see. I cooked up my own serializable sort-setting persistence and I noticed one needs entity data to build up a SortExpression. So I see your point. Too bad the serializable attribute put me on the wrong track flushed .

Thanks for your time and explanation.

Marco