/// <summary> /// Load COSEM objects from the file. /// </summary> /// <param name="stream">Stream.</param> /// <returns>Collection of serialized COSEM objects.</returns> public static GXDLMSObjectCollection Load(Stream stream) { GXDLMSObject obj = null; String target; ObjectType type; using (GXXmlReader reader = new GXXmlReader(stream)) { while (!reader.EOF) { if (reader.IsStartElement()) { target = reader.Name; if (string.Compare("Objects", target, true) == 0) { //Skip. reader.Read(); } else if (string.Compare("Object", target, true) == 0) { int r = 0; string str = reader.GetAttribute(0); if (int.TryParse(str, out r)) { type = (ObjectType)r; } else { type = (ObjectType)Enum.Parse(typeof(ObjectType), str); } reader.Read(); obj = GXDLMSClient.CreateObject(type); reader.Objects.Add(obj); } else if (string.Compare("SN", target, true) == 0) { obj.ShortName = (UInt16)reader.ReadElementContentAsInt("SN"); } else if (string.Compare("LN", target, true) == 0) { obj.LogicalName = reader.ReadElementContentAsString("LN"); } else if (string.Compare("Description", target, true) == 0) { obj.Description = reader.ReadElementContentAsString("Description"); } else { (obj as IGXDLMSBase).Load(reader); obj = null; } } else { reader.Read(); } } return(reader.Objects); } }
/// <summary> /// Load COSEM objects from the file. /// </summary> /// <param name="stream">Stream.</param> /// <param name="objects">Collection of COSEM objects.</param> public static void Load(Stream stream, GXDLMSObjectCollection objects) { GXDLMSObject obj = null; String target; ObjectType type; using (GXXmlReader reader = new GXXmlReader(stream)) { reader.Objects = objects; while (!reader.EOF) { if (reader.IsStartElement()) { target = reader.Name; if (string.Compare("Objects", target, true) == 0) { //Skip. reader.Read(); } else if (target.StartsWith("GXDLMS")) { string str = target.Substring(6); reader.Read(); type = (ObjectType)Enum.Parse(typeof(ObjectType), str); obj = GXDLMSClient.CreateObject(type); obj.Version = 0; } else if (string.Compare("Object", target, true) == 0) { int r = 0; string str = reader.GetAttribute(0); if (int.TryParse(str, out r)) { type = (ObjectType)r; } else { type = (ObjectType)Enum.Parse(typeof(ObjectType), str); } reader.Read(); obj = GXDLMSClient.CreateObject(type); obj.Version = 0; reader.Objects.Add(obj); } else if (string.Compare("SN", target, true) == 0) { obj.ShortName = (UInt16)reader.ReadElementContentAsInt("SN"); } else if (string.Compare("LN", target, true) == 0) { obj.LogicalName = reader.ReadElementContentAsString("LN"); GXDLMSObject tmp = reader.Objects.FindByLN(obj.ObjectType, obj.LogicalName); if (tmp == null) { reader.Objects.Add(obj); } else { obj = tmp; } } else if (string.Compare("Description", target, true) == 0) { obj.Description = reader.ReadElementContentAsString("Description"); } else if (string.Compare("Version", target, true) == 0) { obj.Version = (UInt16)reader.ReadElementContentAsInt("Version"); } else if (string.Compare("Access", target, true) == 0) { int pos = 0; foreach (byte it in reader.ReadElementContentAsString("Access")) { ++pos; obj.SetAccess(pos, (AccessMode)(it - 0x30)); } } else if (string.Compare("MethodAccess", target, true) == 0) { int pos = 0; foreach (byte it in reader.ReadElementContentAsString("MethodAccess")) { ++pos; obj.SetMethodAccess(pos, (MethodAccessMode)(it - 0x30)); } } else { (obj as IGXDLMSBase).Load(reader); obj = null; } } else { reader.Read(); } } foreach (GXDLMSObject it in reader.Objects) { (it as IGXDLMSBase).PostLoad(reader); } } }