public StringKeySerializerTargetFormatter_ByteArrayStringHashTable()
 {
     this.keyMapping = new ByteArrayStringHashTable(9)
     {
         {
             "MyProperty1",
             0
         },
         {
             "MyProperty2",
             1
         },
         {
             "MyProperty3",
             2
         },
         {
             "MyProperty4",
             3
         },
         {
             "MyProperty5",
             4
         },
         {
             "MyProperty6",
             5
         },
         {
             "MyProperty7",
             6
         },
         {
             "MyProperty8",
             7
         },
         {
             "MyProperty9",
             8
         },
     };
     this.stringByteKeys = new byte[][]
     {
         Encoding.UTF8.GetBytes("MyProperty1"),
         Encoding.UTF8.GetBytes("MyProperty2"),
         Encoding.UTF8.GetBytes("MyProperty3"),
         Encoding.UTF8.GetBytes("MyProperty4"),
         Encoding.UTF8.GetBytes("MyProperty5"),
         Encoding.UTF8.GetBytes("MyProperty6"),
         Encoding.UTF8.GetBytes("MyProperty7"),
         Encoding.UTF8.GetBytes("MyProperty8"),
         Encoding.UTF8.GetBytes("MyProperty9"),
     };
 }
Example #2
0
        static EnumFormatter()
        {
            var names  = Enum.GetNames(typeof(T));
            var values = Enum.GetValues(typeof(T));

            nameValueMapping = new ByteArrayStringHashTable <T>(names.Length);
            valueNameMapping = new Dictionary <T, string>(names.Length);

            for (int i = 0; i < names.Length; i++)
            {
                nameValueMapping.Add(JsonWriter.GetEncodedPropertyNameWithoutQuotation(names[i]), (T)values.GetValue(i));
                valueNameMapping[(T)values.GetValue(i)] = names[i];
            }

            // boxed... or generate...
            {
                bool isBoxed;
                var  serialize = EnumFormatterHelper.GetSerializeDelegate(typeof(T), out isBoxed);
                if (isBoxed)
                {
                    var boxSerialize = (JsonSerializeAction <object>)serialize;
                    defaultSerializeByUnderlyingValue = (ref JsonWriter writer, T value, IJsonFormatterResolver _) => boxSerialize.Invoke(ref writer, (object)value, _);
                }
                else
                {
                    defaultSerializeByUnderlyingValue = (JsonSerializeAction <T>)serialize;
                }
            }

            {
                bool isBoxed;
                var  deserialize = EnumFormatterHelper.GetDeserializeDelegate(typeof(T), out isBoxed);
                if (isBoxed)
                {
                    var boxDeserialize = (JsonDeserializeFunc <object>)deserialize;
                    defaultDeserializeByUnderlyingValue = (ref JsonReader reader, IJsonFormatterResolver _) => (T)boxDeserialize.Invoke(ref reader, _);
                }
                else
                {
                    defaultDeserializeByUnderlyingValue = (JsonDeserializeFunc <T>)deserialize;
                }
            }
        }
Example #3
0
        static EnumFormatter()
        {
            var names  = new List <String>();
            var values = new List <object>();

            var type = typeof(T);

            foreach (var item in type.GetFields().Where(fi => fi.FieldType == type))
            {
                var value      = item.GetValue(null);
                var name       = Enum.GetName(type, value);
                var dataMember = item.GetCustomAttributes(typeof(DataMemberAttribute), true)
                                 .OfType <DataMemberAttribute>()
                                 .FirstOrDefault();
                var enumMember = item.GetCustomAttributes(typeof(EnumMemberAttribute), true)
                                 .OfType <EnumMemberAttribute>()
                                 .FirstOrDefault();

                values.Add(value);
                names.Add(
                    (enumMember != null && enumMember.Value != null) ? enumMember.Value
                   : (dataMember != null && dataMember.Name != null) ? dataMember.Name
                   : name);
            }

            nameValueMapping = new ByteArrayStringHashTable <T>(names.Count);
            valueNameMapping = new Dictionary <T, string>(names.Count);

            for (int i = 0; i < names.Count; i++)
            {
                nameValueMapping.Add(JsonWriter.GetEncodedPropertyNameWithoutQuotation(names[i]), (T)values[i]);
                valueNameMapping[(T)values[i]] = names[i];
            }

            // boxed... or generate...
            {
                bool isBoxed;
                var  serialize = EnumFormatterHelper.GetSerializeDelegate(typeof(T), out isBoxed);
                if (isBoxed)
                {
                    var boxSerialize = (JsonSerializeAction <object>)serialize;
                    defaultSerializeByUnderlyingValue = (JsonWriter writer, T value, IJsonFormatterResolver _) => boxSerialize.Invoke(writer, (object)value, _);
                }
                else
                {
                    defaultSerializeByUnderlyingValue = (JsonSerializeAction <T>)serialize;
                }
            }

            {
                bool isBoxed;
                var  deserialize = EnumFormatterHelper.GetDeserializeDelegate(typeof(T), out isBoxed);
                if (isBoxed)
                {
                    var boxDeserialize = (JsonDeserializeFunc <object>)deserialize;
                    defaultDeserializeByUnderlyingValue = (JsonReader reader, IJsonFormatterResolver _) => (T)boxDeserialize.Invoke(reader, _);
                }
                else
                {
                    defaultDeserializeByUnderlyingValue = (JsonDeserializeFunc <T>)deserialize;
                }
            }
        }