protected virtual string GenerateCode(object instance) { _layouter.Append(GetHeader()); _layouter.AppendFormat(GetClassDefinition(), _mappedClass.FullName.Replace('.', '_').Replace("+", "__"), _mappedClass.FullName); _layouter.Begin(); _layouter.Begin(); _layouter.AppendFormat("{0} instance = new {0}();", _mappedClass.FullName); _layouter.Append("reader.AddReference(instance);"); Type type = instance.GetType(); string key = _reader.ReadString(); _layouter.Append("byte typeCode = 0;"); _layouter.Append("string key = null;"); for (byte typeCode = _reader.ReadByte(); typeCode != AMF0TypeCode.EndOfObject; typeCode = _reader.ReadByte()) { _layouter.Append("key = reader.ReadString();"); _layouter.Append("typeCode = reader.ReadByte();"); object value = _reader.ReadData(typeCode); _reader.SetMember(instance, key, value); MemberInfo[] memberInfos = type.GetMember(key); if (memberInfos != null && memberInfos.Length > 0) { GeneratePropertySet(memberInfos[0]); } else { //Log this error (do not throw exception), otherwise our current AMF stream becomes unreliable #if LOGGING log.Warn(__Res.GetString(__Res.Optimizer_Warning)); #endif string msg = __Res.GetString(__Res.Reflection_MemberNotFound, string.Format("{0}.{1}", _mappedClass.FullName, key)); #if LOGGING log.Warn(msg); #endif _layouter.AppendFormat("//{0}", msg); _layouter.Append("reader.ReadData(typeCode);"); } key = _reader.ReadString(); } _layouter.Append("key = reader.ReadString();"); _layouter.Append("typeCode = reader.ReadByte();"); _layouter.Append("if( typeCode != AMF0TypeCode.EndOfObject ) throw new UnexpectedAMF();"); _layouter.Append("return instance;"); _layouter.End(); _layouter.Append("}"); _layouter.End(); _layouter.Append("}"); // Close class _layouter.Append("}"); // Close namespace return(_layouter.ToString()); }