private static bool Init() { if (!typeof(T).IsClass && !typeof(T).IsInterface) { return(false); } var propertyInfos = TypeConfig <T> .Properties; if (propertyInfos.Length == 0) { return(typeof(T).IsDto()); } var propertyNamesLength = propertyInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength]; for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; PropertyWriters[i] = new TypePropertyWriter ( propertyInfo.Name, propertyInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyInfo.PropertyType) ); } return(true); }
private static bool Init() { if (!typeof(T).IsClass && !typeof(T).IsInterface) { return(false); } var propertyInfos = TypeConfig <T> .Properties; if (propertyInfos.Length == 0 && !JsState.IsWritingDynamic) { return(typeof(T).IsDto()); } var propertyNamesLength = propertyInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength]; // NOTE: very limited support for DataContractSerialization (DCS) // NOT supporting Serializable // support for DCS is intended for (re)Name of properties and Ignore by NOT having a DataMember present var isDataContract = typeof(T).GetCustomAttributes(typeof(DataContractAttribute), false).Any(); for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; string propertyName, propertyNameCLSFriendly; if (isDataContract) { var dcsDataMember = propertyInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault() as DataMemberAttribute; if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? propertyInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); } else { propertyName = propertyInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); } PropertyWriters[i] = new TypePropertyWriter ( propertyName, propertyNameCLSFriendly, propertyInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyInfo.PropertyType) ); } return(true); }
private static bool Init() { if (!typeof(T).IsClass && !typeof(T).IsInterface && !JsConfig.TreatAsRefType(typeof(T))) { return(false); } var propertyInfos = TypeConfig <T> .Properties; var fieldInfos = TypeConfig <T> .Fields; var propertyNamesLength = propertyInfos.Length; var fieldNamesLength = fieldInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength + fieldNamesLength]; if (propertyNamesLength + fieldNamesLength == 0 && !JsState.IsWritingDynamic) { return(typeof(T).IsDto()); } var shouldSerializeDynamic = ShouldSerialize(typeof(T)); // NOTE: very limited support for DataContractSerialization (DCS) // NOT supporting Serializable // support for DCS is intended for (re)Name of properties and Ignore by NOT having a DataMember present var isDataContract = typeof(T).IsDto(); for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyDeclaredTypeName; var propertyOrder = -1; var propertyType = propertyInfo.PropertyType; var defaultValue = propertyType.GetDefaultValue(); var propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType && !propertyType.IsEnum && JsConfig.HasSerializeFn.Contains(propertyType) && !JsConfig.HasIncludeDefaultValue.Contains(propertyType); var propertySuppressDefaultAttribute = false; var shouldSerialize = GetShouldSerializeMethod(propertyInfo); if (isDataContract) { var dcsDataMember = propertyInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? propertyInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = propertyType.GetDeclaringTypeName(); propertyOrder = dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else { var dcsDataMember = propertyInfo.GetDataMember(); var alias = dcsDataMember?.Name; propertyName = alias ?? propertyInfo.Name; propertyNameCLSFriendly = alias ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = alias ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = propertyInfo.GetDeclaringTypeName(); } PropertyWriters[i] = new TypePropertyWriter ( propertyType, propertyName, propertyDeclaredTypeName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, propertyInfo.CreateGetter <T>(), Serializer.GetWriteFn(propertyType), propertyType.GetDefaultValue(), shouldSerialize, shouldSerializeDynamic, propertyType.IsEnum ); } for (var i = 0; i < fieldNamesLength; i++) { var fieldInfo = fieldInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyDeclaredTypeName; var propertyOrder = -1; var propertyType = fieldInfo.FieldType; var defaultValue = propertyType.GetDefaultValue(); var propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType && !propertyType.IsEnum && JsConfig.HasSerializeFn.Contains(propertyType) && !JsConfig.HasIncludeDefaultValue.Contains(propertyType); var propertySuppressDefaultAttribute = false; var shouldSerialize = GetShouldSerializeMethod(fieldInfo); if (isDataContract) { var dcsDataMember = fieldInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? fieldInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = fieldInfo.DeclaringType.Name; propertyOrder = dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else { var dcsDataMember = fieldInfo.GetDataMember(); var alias = dcsDataMember?.Name; propertyName = alias ?? fieldInfo.Name; propertyNameCLSFriendly = alias ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = alias ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = fieldInfo.DeclaringType.Name; } PropertyWriters[i + propertyNamesLength] = new TypePropertyWriter ( propertyType, propertyName, propertyDeclaredTypeName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, fieldInfo.CreateGetter <T>(), Serializer.GetWriteFn(propertyType), defaultValue, shouldSerialize, shouldSerializeDynamic, propertyType.IsEnum ); } PropertyWriters = PropertyWriters.OrderBy(x => x.propertyOrder).ToArray(); return(true); }
private static bool Init() { if (!typeof(T).IsClass() && !typeof(T).IsInterface() && !JsConfig.TreatAsRefType(typeof(T))) { return(false); } var propertyInfos = TypeConfig <T> .Properties; var fieldInfos = JsConfig.IncludePublicFields ? TypeConfig <T> .Fields : new FieldInfo[0]; var propertyNamesLength = propertyInfos.Length; var fieldNamesLength = fieldInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength + fieldNamesLength]; if (propertyNamesLength + fieldNamesLength == 0 && !JsState.IsWritingDynamic) { return(typeof(T).IsDto()); } // NOTE: very limited support for DataContractSerialization (DCS) // NOT supporting Serializable // support for DCS is intended for (re)Name of properties and Ignore by NOT having a DataMember present var isDataContract = typeof(T).IsDto(); for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore; if (isDataContract) { var dcsDataMember = propertyInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? propertyInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); } else { propertyName = propertyInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); } var propertyType = propertyInfo.PropertyType; var suppressDefaultValue = propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType) ? propertyType.GetDefaultValue() : null; PropertyWriters[i] = new TypePropertyWriter ( propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), suppressDefaultValue ); } for (var i = 0; i < fieldNamesLength; i++) { var fieldInfo = fieldInfos[i]; string propertyName = fieldInfo.Name; string propertyNameCLSFriendly = propertyName.ToCamelCase(); string propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); var propertyType = fieldInfo.FieldType; var suppressDefaultValue = propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType) ? propertyType.GetDefaultValue() : null; PropertyWriters[i + propertyNamesLength] = new TypePropertyWriter ( propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, fieldInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), suppressDefaultValue ); } return(true); }
/// <summary>Initialises this object.</summary> /// <returns>true if it succeeds, false if it fails.</returns> private static bool Init() { if (!typeof(T).IsClass() && !typeof(T).IsInterface() && !JsConfig.TreatAsRefType(typeof(T))) { return(false); } var isDataContract = typeof(T).IsDto(); var propertyInfos = TypeConfig <T> .Properties; var fieldInfos = JsConfig.IncludePublicFields || isDataContract ? TypeConfig <T> .Fields : new FieldInfo[0]; var propertyNamesLength = propertyInfos.Length; var fieldNamesLength = fieldInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength + fieldNamesLength]; if (propertyNamesLength + fieldNamesLength == 0 && !JsState.IsWritingDynamic) { return(typeof(T).IsDto()); } // NOTE: very limited support for DataContractSerialization (DCS) // NOT supporting Serializable // support for DCS is intended for (re)Name of properties and Ignore by NOT having a DataMember present for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyReflectedName; int propertyOrder = -1; var propertyType = propertyInfo.PropertyType; var defaultValue = propertyType.GetDefaultValue(); bool propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType); bool propertySuppressDefaultAttribute = false; var shouldSerialize = GetShouldSerializeMethod(propertyInfo); if (isDataContract) { var dcsDataMember = propertyInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? propertyInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyReflectedName = dcsDataMember.Name ?? propertyInfo.ReflectedType.Name; // Fields tend to be at topp, push down properties to make it more like common. propertyOrder = dcsDataMember.Order == DataMemberOrderNotSet ? 0 : dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else { propertyName = propertyInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); propertyReflectedName = propertyInfo.ReflectedType.Name; } PropertyWriters[i] = new TypePropertyWriter ( propertyName, propertyReflectedName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, propertyInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), propertyType.GetDefaultValue(), shouldSerialize ); } for (var i = 0; i < fieldNamesLength; i++) { var fieldInfo = fieldInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyReflectedName; int propertyOrder = -1; var propertyType = fieldInfo.FieldType; var defaultValue = propertyType.GetDefaultValue(); bool propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType); bool propertySuppressDefaultAttribute = false; var shouldSerialize = GetShouldSerializeMethod(fieldInfo); if (isDataContract) { var dcsDataMember = fieldInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? fieldInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyReflectedName = dcsDataMember.Name ?? fieldInfo.ReflectedType.Name; propertyOrder = dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else { propertyName = fieldInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); propertyReflectedName = fieldInfo.ReflectedType.Name; } PropertyWriters[i + propertyNamesLength] = new TypePropertyWriter ( propertyName, propertyReflectedName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, fieldInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), defaultValue, shouldSerialize ); } PropertyWriters = PropertyWriters.OrderBy(x => x.propertyOrder).ToArray(); return(true); }
private static bool Init() { if (!typeof(T).IsClass() && !typeof(T).IsInterface() && !JsConfig.TreatAsRefType(typeof(T))) { return(false); } var propertyInfos = TypeConfig <T> .Properties; var fieldInfos = JsConfig.IncludePublicFields ? TypeConfig <T> .Fields : new FieldInfo[0]; var propertyNamesLength = propertyInfos.Length; var fieldNamesLength = fieldInfos.Length; PropertyWriters = new TypePropertyWriter[propertyNamesLength + fieldNamesLength]; if (propertyNamesLength + fieldNamesLength == 0 && !JsState.IsWritingDynamic) { return(typeof(T).IsDto()); } #if PLATFORM_USE_SERIALIZATION_DLL // NOTE: very limited support for DataContractSerialization (DCS) // NOT supporting Serializable // support for DCS is intended for (re)Name of properties and Ignore by NOT having a DataMember present var isDataContract = typeof(T).IsDto(); #endif for (var i = 0; i < propertyNamesLength; i++) { var propertyInfo = propertyInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyDeclaredTypeName; #if PLATFORM_USE_SERIALIZATION_DLL int propertyOrder = -1; if (!isDataContract) { propertyOrder = propertyInfo.MetadataToken; } #else int propertyOrder = propertyInfo.MetadataToken; // use MetadataToken as order . #endif var propertyType = propertyInfo.PropertyType; var defaultValue = propertyType.GetDefaultValue(); bool propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType); bool propertySuppressDefaultAttribute = false; #if NETFX_CORE var shouldSerialize = (Func <T, bool>)null; #else var shouldSerialize = GetShouldSerializeMethod(propertyInfo); #endif #if PLATFORM_USE_SERIALIZATION_DLL if (isDataContract) { var dcsDataMember = propertyInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? propertyInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = propertyType.GetDeclaringTypeName(); propertyOrder = dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else #endif { propertyName = propertyInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = propertyInfo.GetDeclaringTypeName(); } PropertyWriters[i] = new TypePropertyWriter ( propertyName, propertyDeclaredTypeName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, propertyInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), propertyType.GetDefaultValue(), shouldSerialize ); } for (var i = 0; i < fieldNamesLength; i++) { var fieldInfo = fieldInfos[i]; string propertyName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyDeclaredTypeName; #if PLATFORM_USE_SERIALIZATION_DLL int propertyOrder = -1; if (!isDataContract) { propertyOrder = fieldInfo.MetadataToken; } #else int propertyOrder = fieldInfo.MetadataToken; // use MetadataToken as order . #endif var propertyType = fieldInfo.FieldType; var defaultValue = propertyType.GetDefaultValue(); bool propertySuppressDefaultConfig = defaultValue != null && propertyType.IsValueType() && JsConfig.HasSerializeFn.Contains(propertyType); bool propertySuppressDefaultAttribute = false; #if NETFX_CORE var shouldSerialize = (Func <T, bool>)null; #else var shouldSerialize = GetShouldSerializeMethod(fieldInfo); #endif #if PLATFORM_USE_SERIALIZATION_DLL if (isDataContract) { var dcsDataMember = fieldInfo.GetDataMember(); if (dcsDataMember == null) { continue; } propertyName = dcsDataMember.Name ?? fieldInfo.Name; propertyNameCLSFriendly = dcsDataMember.Name ?? propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = dcsDataMember.Name ?? propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = fieldInfo.DeclaringType.Name; propertyOrder = dcsDataMember.Order; propertySuppressDefaultAttribute = !dcsDataMember.EmitDefaultValue; } else #endif { propertyName = fieldInfo.Name; propertyNameCLSFriendly = propertyName.ToCamelCase(); propertyNameLowercaseUnderscore = propertyName.ToLowercaseUnderscore(); propertyDeclaredTypeName = fieldInfo.DeclaringType.Name; } PropertyWriters[i + propertyNamesLength] = new TypePropertyWriter ( propertyName, propertyDeclaredTypeName, propertyNameCLSFriendly, propertyNameLowercaseUnderscore, propertyOrder, propertySuppressDefaultConfig, propertySuppressDefaultAttribute, fieldInfo.GetValueGetter <T>(), Serializer.GetWriteFn(propertyType), defaultValue, shouldSerialize ); } #if PLATFORM_USE_AOT List <TypePropertyWriter> results = new List <TypePropertyWriter> (PropertyWriters); // foreach( TypePropertyWriter item in PropertyWriters ) //{ // results.Add( item ); //} results.Sort(typePropertyWriterComparerDefault); PropertyWriters = results.ToArray( ); return(true); #else PropertyWriters = PropertyWriters.OrderBy(x => x.propertyOrder).ToArray(); return(true); #endif }