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!
--
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.