List<byte> GetAccessRights(GXDLMSObject item) { GXAttributeCollection attribs = new GXAttributeCollection(); attribs.AddRange(item.Attributes); PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(item); foreach (PropertyDescriptor it in pdc) { GXDLMSAttribute att = it.Attributes[typeof(GXDLMSAttribute)] as GXDLMSAttribute; if (att != null && attribs.Find(att.Index) == null) { attribs.Add(att); } } List<byte> data = new List<byte>(); data.Add((byte)DataType.Structure); data.Add(2); data.Add((byte)DataType.Array); data.Add((byte)attribs.Count); foreach (GXDLMSAttributeSettings att in attribs) { data.Add((byte)DataType.Structure); //attribute_access_item data.Add(3); GXCommon.SetData(data, DataType.Int8, att.Index); GXCommon.SetData(data, DataType.Enum, att.Access); GXCommon.SetData(data, DataType.None, 0); } data.Add((byte)DataType.Array); data.Add((byte)item.MethodAttributes.Count); foreach (GXDLMSAttributeSettings it in item.MethodAttributes) { data.Add((byte)DataType.Structure); //attribute_access_item data.Add(2); GXCommon.SetData(data, DataType.Int8, it.Index); GXCommon.SetData(data, DataType.Enum, it.MethodAccess); } return data; }