Serialize/Deserialize Variant Value in XML

Questions regarding the use of the .NET SDK 2.0 for Server or Client development or integration into customer products ...

Moderator: uasdknet

Post Reply
UA_Developer
Jr. Member
Jr. Member
Posts: 2
Joined: 02 Nov 2020, 13:52

Serialize/Deserialize Variant Value in XML

Post by UA_Developer »

Hello,

i have a problem concerning the serialization of a UA model on my OPC UA server. I want to store my transferred datatype in an xml document.

Using XMLSerializer:

Code: Select all

xs = new XmlSerializer(typeof(CustomDataType));
XmlDocument xmlDocument = new XmlDocument();

using (var fs = new FileStream(path, FileMode.OpenOrCreate))
{
	using (tw = new StreamWriter(fs))
	{
		xs.Serialize(tw, jobOrder);
	}
}
My CustomDataType contains beside common data types like string, etc. also a DataMember of type Variant.

Code: Select all

        [DataMember(Name = "Value", IsRequired = false, Order = 2)]
        public Variant Value
        {
            get
            {
                return m_Value;
            }
            set
            {
                m_Value = value;
            }
        }
During serialization, the data for the type Variant is apparently not considered and not written into the XML document.

Does anyone have an idea how I can serialize this data and write it there?

Thanks for the help-

User avatar
Support Team
Hero Member
Hero Member
Posts: 3064
Joined: 18 Mar 2011, 15:09

Re: Serialize/Deserialize Variant Value in XML

Post by Support Team »

Hello,

the XmlSerializer is not able to deal with DataMember of type Variant. We suggest to use the XmlEncoder from UaBase. Here is some sample code.

Code: Select all

string filename = Path.GetDirectoryName(typeof(AddressspaceExportFixture).Assembly.Location) + "/CustomDataType.XmlEncoder.Serialization.xml";
MessageContext context = new MessageContext();
XmlEncoder encoder = new XmlEncoder(context);
encoder.PushNamespace(CustomNamespaces.Test);
encoder.WriteEncodeable("CustomDataType", cdt, typeof(CustomDataType));
System.Xml.XmlDocument document = new System.Xml.XmlDocument();
document.InnerXml = encoder.Close();
using (TextWriter tw = new StreamWriter(filename, false, Encoding.UTF8))
{
    document.Save(tw);
}
Best regards
Unified Automation Support Team

Post Reply