1 // Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. 2 3 using System.Collections.Generic; 4 using System.Diagnostics; 5 using System.Dynamic; 6 using System.Web.Script.Serialization; 7 using Microsoft.Internal.Web.Utils; 8 9 namespace System.Web.Helpers 10 { 11 /// <summary> 12 /// Converter that knows how to get the member values from a dynamic object. 13 /// </summary> 14 internal class DynamicJavaScriptConverter : JavaScriptConverter 15 { 16 public override IEnumerable<Type> SupportedTypes 17 { 18 get 19 { 20 // REVIEW: For some reason the converters don't pick up interfaces 21 yield return typeof(IDynamicMetaObjectProvider); 22 yield return typeof(DynamicObject); 23 } 24 } 25 Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)26 public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) 27 { 28 throw new NotSupportedException(); 29 } 30 Serialize(object obj, JavaScriptSerializer serializer)31 public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) 32 { 33 var values = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase); 34 var memberNames = DynamicHelper.GetMemberNames(obj); 35 36 // This should never happen 37 Debug.Assert(memberNames != null); 38 39 // Get the value for each member in the dynamic object 40 foreach (string memberName in memberNames) 41 { 42 values[memberName] = DynamicHelper.GetMemberValue(obj, memberName); 43 } 44 45 return values; 46 } 47 } 48 } 49