I've been having to do some custom serialization in BizTalk and wanted to share some lessons learnt:
The System.Xml.Serialization.XmlSerializer class does the serializing and deserializing of class objects. There are some constraints that the class must observe:
1) Only public properties will be serialized, private ones are ignored totally
2) The class must be public too and it needs a parameterless constructor
Serialization example:
MyClass myClass = new MyClass();
FileStream myFileStream = new FileStream(@"C:\output.xml", FileMode.Open, FileAccess.Write);
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
serializer.Serialize(myFileStream, myClass);
If you have a schema for your xml data, use the xsd utility to generate the class:
C:\Program Files\Microsoft Visual Studio 8\VC\xsd MySchema.xsd /classes
I'll comment more about using the IXmlSerializable interface in the future (note that the ReadXml method needs to rehydrate inner objects), but for now thats all.
12 October 2007
XML Serialization
BizTalk Error
I have come across yet another error in BizTalk, I'll be looking into this one and posting a solution as soon as I find it:
Microsoft.XLANGs.Core.XlangSoapException: An error occurred while processing the message, refer to the details section for more information
Message ID: {AD19FF31-B1EB-45C2-84C8-717C9AA55E4F}
Instance ID: {6AFEEE47-42DC-4EC7-B4BB-7E674597F5C6}
Error Description: Object reference not set to an instance of an object.
at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx)
at Microsoft.XLANGs.Core.Subscription.Receive(Segment s, Context ctx, Envelope& env, Boolean topOnly)
at Microsoft.XLANGs.Core.PortBase.GetMessageId(Subscription subscription, Segment currentSegment, Context cxt, Envelope& env, CachedObject location)
Microsoft.XLANGs.Core.XlangSoapException: An error occurred while processing the message, refer to the details section for more information
Message ID: {AD19FF31-B1EB-45C2-84C8-717C9AA55E4F}
Instance ID: {6AFEEE47-42DC-4EC7-B4BB-7E674597F5C6}
Error Description: Object reference not set to an instance of an object.
at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx)
at Microsoft.XLANGs.Core.Subscription.Receive(Segment s, Context ctx, Envelope& env, Boolean topOnly)
at Microsoft.XLANGs.Core.PortBase.GetMessageId(Subscription subscription, Segment currentSegment, Context cxt, Envelope& env, CachedObject location)
Subscribe to:
Posts (Atom)