How to read and wite an array of structures to a server

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

Moderator: uasdknet

Post Reply
r.guerzoni
Jr. Member
Jr. Member
Posts: 2
Joined: 12 Jul 2018, 07:29

How to read and wite an array of structures to a server

Post by r.guerzoni »

Good morning,
I have just started to evaluate the development tool for .NET, I would need to read and write an array of structures from a server. I saw the example to read and decode a structured type and I modified it to read an array but I can not find information relevant to writing arrays of structures. Can someone more expert help me?
For now I thought to read the information before modifying it but it seems inefficient.

Thank you
Roberto

r.guerzoni
Jr. Member
Jr. Member
Posts: 2
Joined: 12 Jul 2018, 07:29

Re: How to read and wite an array of structures to a server

Post by r.guerzoni »

Hello,
in the end, after some experiments, I found some possible solutions and I want to share them with you
updating my post.
Feel free to comment and suggest any improvement.
Thank you

Solution 1

Code: Select all

        private static GenericEncodeableObject WriteField( DataValue dv, string fieldName, object fieldValue, int index = -1) {
            if( dv.WrappedValue.IsArray ) {
                var values = dv.WrappedValue.ToVariantArray();
                ExtensionObject e = values[index].ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                values[index] =  new Variant(encodeable);
                dv.WrappedValue = values;
                return encodeable;
            }
            else {
                ExtensionObject e = dv.WrappedValue.ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                dv.WrappedValue = new Variant(encodeable);
                return encodeable;
            }
        }

        private static void WriteField(DataValue dv, GenericEncodeableObject encodeable, string fieldName, object fieldValue, int index = -1) {
            if( dv.WrappedValue.IsArray ) {
                var values = dv.WrappedValue.ToVariantArray();
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                values[index] = new Variant(encodeable);
                dv.WrappedValue = values;
            }
            else {
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                dv.WrappedValue = new Variant(encodeable);
            }
        }
Solution 2

Code: Select all

        private static DataValue WriteField( DataValue dv, string fieldName, object fieldValue, int index = -1) {
            if( dv.WrappedValue.IsArray ) {
                var values = dv.WrappedValue.ToVariantArray();
                ExtensionObject e = values[index].ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                var eo = EncodeableObject.Encode(m_session.MessageContext, encodeable, false);
                values[index] = new Variant(eo);
                return new DataValue(values);
            }
            else {
                ExtensionObject e = dv.WrappedValue.ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                var eo = EncodeableObject.Encode(m_session.MessageContext, encodeable, false);
                var value = new Variant(eo);
                return new DataValue(value);
            }
        }
Solution 3

Code: Select all

        private static void WriteField( DataValue dv, string fieldName, object fieldValue, int index = -1) {
            if( dv.WrappedValue.IsArray ) {
                var values = dv.WrappedValue.ToVariantArray();
                ExtensionObject e = values[index].ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                var eo = EncodeableObject.Encode(m_session.MessageContext, encodeable, false);
                values[index] = new Variant(eo);
                dv.WrappedValue = values;
            }
            else {
                ExtensionObject e = dv.WrappedValue.ToExtensionObject();
                GenericEncodeableObject encodeable = m_dataTypeManager.ParseValue(e);
                encodeable[fieldName] = new Variant(fieldValue, encodeable[fieldName].TypeInfo);
                var eo = EncodeableObject.Encode(m_session.MessageContext, encodeable, false);
                var value = new Variant(eo);
                dv.WrappedValue = value;
            }
        }

Post Reply