/// <summary> /// constructorDictに値を渡す時はISerializer#CreateDefaultConstructorDictionary関数の戻り値をベースにしたものを利用することを推奨します。 /// </summary> /// <param name="stream"></param> /// <param name="obj"></param> /// <param name="constructorDict">nullの場合はCreateDefaultConstructorDictionary()の戻り値が使用されます。</param> public void Serialize(TextWriter stream, object obj) { var(info, context) = CreateInfoAndContext(obj.GetType()); var doneSerialized = _instanceCreator.Serialize(obj, info, context); if (doneSerialized) { } else if (obj is ISerializable) { var serializable = obj as ISerializable; serializable.GetObjectData(info, context); } else if (obj.GetType().GetCustomAttribute <System.SerializableAttribute>() != null || obj.GetType().IsStruct()) { //System.SerializableAttributeが指定されていたら、publicまたはSerializeFieldなFieldを集計する foreach (var fieldInfo in obj.GetSerializedFieldEnumerable()) { info.AddValue(fieldInfo.FieldInfo.Name, fieldInfo.Value); } } else { Debug.LogWarning($"This type({obj.GetType().FullName}) don't serialize..."); } //if (info.MemberCount <= 0) return; WriteTo(stream, info); }