void StoreAppropriatelyTypedValue(ObjectState state, MemberAndValue ms, object obj, object keyObj) { var parent = state.Value; var xt = state.Type; var xm = ms.Member; if (ReferenceEquals(xm, XamlLanguage.Initialization)) { state.Value = GetCorrectlyTypedValue(null, xt, obj); state.IsInstantiated = true; } else if (xm.Type.IsXData) { var xdata = (XData)obj; #if NETSTANDARD1_0 var ixser = xm.Invoker.GetValue(state.Value); if (ixser != null && (ReflectionHelpers.IXmlSerializableType?.GetTypeInfo().IsAssignableFrom(ixser.GetType().GetTypeInfo()) ?? false)) { ReflectionHelpers.IXmlSerializableReadXmlMethod?.Invoke(ixser, new object[] { (XmlReader)xdata.XmlReader }); } #else var ixser = xm.Invoker.GetValue(state.Value) as IXmlSerializable; if (ixser != null) { ixser.ReadXml((XmlReader)xdata.XmlReader); } #endif } else if (ReferenceEquals(xm, XamlLanguage.Base)) { ms.Value = GetCorrectlyTypedValue(null, xm.Type, obj); } else if (ReferenceEquals(xm, XamlLanguage.Name) || xm == xt.GetAliasedProperty(XamlLanguage.Name)) { ms.Value = GetCorrectlyTypedValue(xm, XamlLanguage.String, obj); } else if (ReferenceEquals(xm, XamlLanguage.Key) || xm == xt.GetAliasedProperty(XamlLanguage.Key)) { var keyValue = GetCorrectlyTypedValue(null, xt.KeyType, obj); state.KeyValue = keyValue; ms.Value = keyValue; } else { if (!AddToCollectionIfAppropriate(xt, xm, parent, obj, keyObj)) { if (!xm.IsReadOnly || xm.IsConstructorArgument) { ms.Value = GetCorrectlyTypedValue(xm, xm.Type, obj); } } } }
void StoreAppropriatelyTypedValue(ObjectState state, MemberAndValue ms, object obj, object keyObj) { var parent = state.Value; var xt = state.Type; var xm = ms.Member; if (ReferenceEquals(xm, XamlLanguage.Initialization)) { state.Value = GetCorrectlyTypedValue(null, xt, obj); state.IsInstantiated = true; } else if (xm.Type.IsXData) { var xdata = (XData)obj; var ixser = xm.Invoker.GetValue(state.Value) as IXmlSerializable; if (ixser != null) { ixser.ReadXml((XmlReader)xdata.XmlReader); } } else if (ReferenceEquals(xm, XamlLanguage.Base)) { ms.Value = GetCorrectlyTypedValue(null, xm.Type, obj); } else if (ReferenceEquals(xm, XamlLanguage.Name) || xm == xt.GetAliasedProperty(XamlLanguage.Name)) { ms.Value = GetCorrectlyTypedValue(xm, XamlLanguage.String, obj); } else if (ReferenceEquals(xm, XamlLanguage.Key) || xm == xt.GetAliasedProperty(XamlLanguage.Key)) { var keyValue = GetCorrectlyTypedValue(null, xt.KeyType, obj); state.KeyValue = keyValue; ms.Value = keyValue; } else { if (!AddToCollectionIfAppropriate(xt, xm, parent, obj, keyObj)) { if (!xm.IsReadOnly || xm.IsConstructorArgument) { ms.Value = GetCorrectlyTypedValue(xm, xm.Type, obj); } } } }