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
How to read and wite an array of structures to a server
Moderator: uasdknet
-
- Jr. Member
- Posts: 2
- Joined: 12 Jul 2018, 07:29
-
- Jr. Member
- Posts: 2
- Joined: 12 Jul 2018, 07:29
Re: How to read and wite an array of structures to a server
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
Solution 2
Solution 3
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);
}
}
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);
}
}
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;
}
}