/// <summary> /// Return the value of the K3P message field specified. /// </summary> private Object InternalFromElementReader(K3pElementReader r, Type t) { if (t == typeof(UInt32)) { return(r.Int()); } else if (t.IsEnum) { return(Enum.ToObject(t, r.Int())); } else if (t == typeof(String)) { return(r.Str()); } else if (t == typeof(byte[])) { return(r.Bin()); } else if (t.IsArray) { Type elType = t.GetElementType(); UInt32 size = r.Int(); Array a = Array.CreateInstance(elType, size); for (UInt32 i = 0; i < size; i++) { a.SetValue(InternalFromElementReader(r, elType), i); } return(a); } else if (t.IsSubclassOf(typeof(K3pMsg))) { K3pMsg m = (K3pMsg)Activator.CreateInstance(t); m.FromElementReader(r); return(m); } else { throw new K3pException("unsupported type " + t.FullName + " in K3P"); } }
/// <summary> /// Helper method for Slurp(). /// </summary> private void SlurpHelper(K3pMsg inMsg, out K3pMsg outMsg) { inMsg.FromElementReader(this); outMsg = inMsg; }