public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartObject(); writer.WritePropertyName("@#IModel"); writer.WriteValue("0"); if (_writeTypeInfo) { writer.WritePropertyName("__type"); var valueType = value.GetType(); if (TypeCacheUtils.IsGeneratedType(valueType)) { valueType = valueType.BaseType; } if (valueType != null) { var assemblyQualifiedName = valueType.AssemblyQualifiedName; writer.WriteValue(assemblyQualifiedName); } } foreach (PropertyInfo prop in value.GetType().GetProperties()) { if (TypeCacheUtils.IsExcludedProperty(prop)) { continue; } //This check might be innecessary if we are serializing Deltas because the delta should not include the UniqueID if (!_writeUniqueId && string.Equals(prop.Name, "UniqueID")) { continue; } writer.WritePropertyName(prop.Name); serializer.Serialize(writer, prop.GetValue(value, null)); } writer.WriteEndObject(); }
public static void AddToTypeContractorCache(Type t) { if (SHORTENTYPENAME) { lock (SyncTypeTables) { if (TypeCacheUtils.IsGeneratedType(t)) { //We will map the intercept types to their base types //This typecontractor cache is used for serialization //We do not need to know the intercepted type var interceptedType = t; TypeCacheUtils.GetOriginalType(ref t); string currentKey; if (!typeContractorReverse.TryGetValue(t, out currentKey)) { AddToTypeContractorCache(t); currentKey = typeContractorReverse[t]; } typeContractorReverse.Add(interceptedType, currentKey); } else { string key = typeContractorForward.Count.ToBase95ToString(PADDEDCONTRACTEDTYPENAME); if (key.Length == 1) { key += '~'; //by now the size is 2 then only add one char '~' } typeContractorForward.Add(key, t); typeContractorReverse.Add(t, key); } } } }
public override JsonContract ResolveContract(Type type) { //We do not want two different contracts for the proxy type and the actual type if (TypeCacheUtils.IsGeneratedType(type)) { TypeCacheUtils.GetOriginalType(ref type); } return(base.ResolveContract(type)); }
public override void BindToName(Type serializedType, out string assemblyName, out string typeName) { //var longAssemblyName = serializedType.Assembly.FullName; if (TypeCacheUtils.IsGeneratedType(serializedType)) { serializedType = serializedType.BaseType; } TypeCacheUtils.AssemblyQualifiedNameCache(serializedType, out assemblyName, out typeName); }
public static int GetModelTypedInt(Type type) { if (TypeCacheUtils.IsGeneratedType(type)) { type = type.BaseType; } int mappedType = 0; ClientSideMappingInfo.TryGetValue(type, out mappedType); return(mappedType); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartObject(); writer.WritePropertyName("$type"); var valueType = value.GetType(); if (TypeCacheUtils.IsGeneratedType(valueType)) { valueType = valueType.BaseType; } if (valueType != null) { var assemblyQualifiedName = valueType.AssemblyQualifiedName; writer.WriteValue(assemblyQualifiedName); } var viewmodel = (IStateObject)value.GetPropertyValue("ViewModel"); var uid = viewmodel.UniqueID; writer.WritePropertyName("UniqueID"); writer.WriteValue(uid); writer.WriteEndObject(); }