protected internal void UpdateClientObjectPropertyType(string propertyName, object propertyValue, JsonReader reader) { if (string.IsNullOrEmpty(propertyName)) { throw ClientUtility.CreateArgumentNullException("propertyName"); } if (propertyValue == null) { throw ClientUtility.CreateArgumentNullException("propertyValue"); } if (reader == null) { throw ClientUtility.CreateArgumentNullException("reader"); } ClientObject clientObject = propertyValue as ClientObject; if (clientObject == null) { throw ClientUtility.CreateArgumentException("propertyValue"); } if (!this.ObjectData.ClientObjectProperties.ContainsKey(propertyName)) { throw ClientUtility.CreateArgumentException("propertyName"); } string scriptType; if (reader.PeekTokenType() == JsonTokenType.ObjectStart && reader.PeekObjectType(out scriptType)) { Type typeFromScriptType = ScriptTypeMap.GetTypeFromScriptType(scriptType); //Edited for .NET Core //if (typeFromScriptType != null && typeFromScriptType != propertyValue.GetType() && propertyValue.GetType().IsAssignableFrom(typeFromScriptType)) if (typeFromScriptType != null && typeFromScriptType != propertyValue.GetType()) { ClientObject clientObject2 = ScriptTypeMap.CreateObjectFromScriptType(scriptType, this.Context) as ClientObject; if (clientObject2 != null) { clientObject.SetTypedObject(clientObject2); this.ObjectData.ClientObjectProperties[propertyName] = clientObject2; } } } }
private void ProcessResponseStream(Stream responseStream) { StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); JsonReader jsonReader = new JsonReader(reader, this.m_context); jsonReader.ReadArrayStart(); Dictionary<string, object> dictionary = jsonReader.ReadObject() as Dictionary<string, object>; if (dictionary == null) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } object obj; if (!dictionary.TryGetValue("SchemaVersion", out obj)) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } string text = obj as string; if (string.IsNullOrEmpty(text)) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } this.m_context.ServerSchemaVersion = new Version(text); if (!dictionary.TryGetValue("LibraryVersion", out obj)) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } string text2 = obj as string; if (string.IsNullOrEmpty(text2)) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } this.m_context.ServerLibraryVersion = new Version(text2); if (dictionary.TryGetValue("TraceCorrelationId", out obj)) { this.m_context.SetTraceCorrelationId(obj as string); } if (!dictionary.TryGetValue("ErrorInfo", out obj)) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } object obj2 = obj; if (obj2 != null) { Dictionary<string, object> dictionary2 = obj2 as Dictionary<string, object>; if (dictionary2 == null) { throw new ClientRequestException(Resources.GetString("RequestUnknownResponse")); } ServerException ex = ServerException.CreateFromErrorInfo(dictionary2); throw ex; } else { if (!ClientRuntimeContext.CanHandleResponseSchema(this.m_context.ServerSchemaVersion)) { throw new ClientRequestException(Resources.GetString("CannotHandleServerResponseSchema", new object[] { text })); } while (jsonReader.PeekTokenType() != JsonTokenType.ArrayEnd) { long num = jsonReader.ReadInt64(); obj = null; if (this.m_queryIdToObjectMap.TryGetValue(num.ToString(CultureInfo.InvariantCulture), out obj) && obj != null) { ClientObject clientObject = obj as ClientObject; string scriptType = null; if (clientObject != null && jsonReader.PeekTokenType() == JsonTokenType.ObjectStart && jsonReader.PeekObjectType(out scriptType)) { Type typeFromScriptType = ScriptTypeMap.GetTypeFromScriptType(scriptType); if (typeFromScriptType != null && typeFromScriptType != clientObject.GetType()) { ClientObject clientObject2 = ScriptTypeMap.CreateObjectFromScriptType(scriptType, this.Context) as ClientObject; if (clientObject2 != null) { clientObject.SetTypedObject(clientObject2); obj = clientObject2; } } } IFromJson fromJson = obj as IFromJson; if (fromJson != null && !fromJson.CustomFromJson(jsonReader)) { fromJson.FromJson(jsonReader); } } else { jsonReader.ReadObject(); } } return; } }