private IAWObject UnrollDictionary(Hashtable dict) { IAWObject iSFSObject = AWObject.NewInstance(); IEnumerator enumerator = dict.Keys.GetEnumerator(); try { while (enumerator.MoveNext()) { string text = (string)enumerator.Current; AWDataWrapper sFSDataWrapper = this.WrapField(dict[text]); if (sFSDataWrapper == null) { throw new AWCodecError(string.Concat(new object[] { "Cannot serialize field of dictionary with key: ", text, ", ", dict[text], " -- unsupported type!" })); } iSFSObject.Put(text, sFSDataWrapper); } } finally { IDisposable disposable; if ((disposable = (enumerator as IDisposable)) != null) { disposable.Dispose(); } } return(iSFSObject); }
private void ConvertCsObj(object csObj, IAWObject sfsObj) { Type type = csObj.GetType(); string fullName = type.FullName; if (!(csObj is SerializableAWType)) { throw new AWCodecError(string.Concat(new object[] { "Cannot serialize object: ", csObj, ", type: ", fullName, " -- It doesn't implement the SerializableAWType interface" })); } IAWArray iSFSArray = AWArray.NewInstance(); sfsObj.PutUtfString(DefaultAWDataSerializer.CLASS_MARKER_KEY, fullName); sfsObj.PutSFSArray(DefaultAWDataSerializer.CLASS_FIELDS_KEY, iSFSArray); FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo[] array = fields; for (int i = 0; i < array.Length; i++) { FieldInfo fieldInfo = array[i]; string name = fieldInfo.Name; object value = fieldInfo.GetValue(csObj); IAWObject iSFSObject = AWObject.NewInstance(); AWDataWrapper sFSDataWrapper = this.WrapField(value); if (sFSDataWrapper == null) { throw new AWCodecError(string.Concat(new object[] { "Cannot serialize field of object: ", csObj, ", field: ", name, ", type: ", fieldInfo.GetType().Name, " -- unsupported type!" })); } iSFSObject.PutUtfString(DefaultAWDataSerializer.FIELD_NAME_KEY, name); iSFSObject.Put(DefaultAWDataSerializer.FIELD_VALUE_KEY, sFSDataWrapper); iSFSArray.AddSFSObject(iSFSObject); } }