Michael
unread,Mar 19, 2012, 7:32:34 PM3/19/12Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Castle Project Users
Active record requires collections to be IList<T>, which I can't seem
to deserialize. Does anyone have any suggestions to modify my AR
classes (or serialization/deserialization code) to allow me to
serialize/deserialize these AR classes?
[Serializable]
[DataContract]
[ActiveRecord("Patients")]
public class Patient : ActiveRecordBase<Patient>
{
[DataMember]
[PrimaryKey(Generator = PrimaryKeyType.Identity, Column =
"PatientId")]
public virtual long Id { get; set; }
[DataMember]
[Property(NotNull = true, Length = 100)]
public virtual string First { get; set; }
[DataMember]
[Property(NotNull = true, Length = 100)]
public virtual string Last { get; set; }
[DataMember]
[XmlArray]
[HasMany(typeof(Address), Cascade =
ManyRelationCascadeEnum.AllDeleteOrphan, Table = "Addresses",
ColumnKey = "PatientId", Inverse = true)]
public virtual IList<Address> Addresses { get; set; }
}
[Serializable]
[DataContract]
[ActiveRecord("Addresses")]
public class Address : ActiveRecordBase<Address>
{
[DataMember]
[PrimaryKey(Generator = PrimaryKeyType.Identity, Column =
"AddressId")]
public virtual long Id { get; set; }
[DataMember]
[Property(NotNull = true, Length = 255)]
public virtual string Address1 { get; set; }
[DataMember]
[Property(NotNull = true, Length = 255)]
public virtual string City { get; set; }
[DataMember]
[Property(NotNull = true, Length = 10)]
public virtual string PostalCode { get; set; }
[DataMember]
[Property(NotNull = true, Length = 50)]
public virtual string State { get; set; }
}
Here's my code to serialize & deserialize:
public static string Serialize(object objectToSerialize)
{
var ns = new XmlSerializerNamespaces();
ns.Add(String.Empty, String.Empty);
var memoryStream = new MemoryStream();
var settings = new XmlWriterSettings {Indent = false,
OmitXmlDeclaration = true, Encoding = Encoding.UTF8};
var serializer = new XmlSerializer(typeof(T));
var writer = XmlWriter.Create(memoryStream, settings);
serializer.Serialize(writer, objectToSerialize, ns);
return Utf8ByteArrayToString(memoryStream.ToArray());
}
public static object Deserialize(string objectXml, Type[]
additionalTypes)
{
var encoding = new UTF8Encoding();
var byteArray = encoding.GetBytes(objectXml);
var memoryStream = new MemoryStream(byteArray);
var xmlRoot = XElement.Load(memoryStream);
var o = new XmlSerializer(typeof(T),
additionalTypes).Deserialize(xmlRoot.CreateReader());
return o;
}
Thanks!