Serialize RelationPredicateBucket / SortExpression

Posts   
 
    
El Barto
User
Posts: 64
Joined: 09-Nov-2006
# Posted on: 02-Nov-2011 21:01:16   

I use LLBLGen pro 3.1 I would like to serialize a RelationPredicateBucket object and SortExpression to xml, but can't find a way to do it. The code to serialize the RelationPredicateBucket runs but the bucket is always serialized as an empty object. The code to serialize the SortExpression doesn't as it is not possible to serialize ISortClause. Is there a way to serialize these objects?


            RelationPredicateBucket filter = new RelationPredicateBucket();
            filter.Relations.Add(OitmEntity.Relations.ImageEntityUsingItemCode);
            filter.PredicateExpression.Add(OitmFields.ItemCode == "AARD0001");

            SortExpression sorter = new SortExpression();
            sorter.Add(OitmFields.ItemName | SortOperator.Descending);

            string strFilter = string.Empty;
            XmlSerializer xmlSerializerFilter = new XmlSerializer(typeof(RelationPredicateBucket));
            using(MemoryStream memStrFilter = new MemoryStream()){
                xmlSerializerFilter.Serialize(memStrFilter, filter);
                memStrFilter.Position = 0;
                using (StreamReader strReadFilter = new StreamReader(memStrFilter)) {
                    strFilter = strReadFilter.ReadToEnd();
                }
            }

            string strSort = string.Empty;
            XmlSerializer xmlSerializerSort = new XmlSerializer(typeof(SortExpression));
            using (MemoryStream memStrSort = new MemoryStream()) {
                xmlSerializerFilter.Serialize(memStrSort, sorter);
                memStrSort.Position = 0;
                using (StreamReader strReadSort = new StreamReader(memStrSort)) {
                    strSort = strReadSort.ReadToEnd();
                }
            }



daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 03-Nov-2011 04:37:19   

Just use a Binary formatter. Example:

public string SerializeFilter(IRelationPredicateBucket bucket)
{
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
    MemoryStream ms = new MemoryStream();
    formatter.Serialize(ms, bucket);

    return Convert.ToBase64String(ms.ToArray());
}

public IRelationPredicateBucket DeserializeFilter(string text)
{
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
    byte[] bucketBits = Convert.FromBase64String(text);
    MemoryStream ms = new MemoryStream(bucketBits);

    object obj = formatter.Deserialize(ms);
    return (RelationPredicateBucket)obj;
}

It's the same for ISortExpression.

David Elizondo | LLBLGen Support Team
El Barto
User
Posts: 64
Joined: 09-Nov-2006
# Posted on: 03-Nov-2011 19:32:09   

Thanks Daelmo! Works for me...