コード例 #1
0
        public static void WriteValueToXmlElement(XmlWriter writer, object objValue, SerializationContext serializationContext)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (serializationContext == null)
            {
                throw new ArgumentNullException("serializationContext");
            }
            if (objValue == null)
            {
                writer.WriteAttributeString("Type", "Null");
                return;
            }
            if (!(objValue is ClientObject))
            {
                if (objValue is ClientValueObject)
                {
                    ClientValueObject clientValueObject = (ClientValueObject)objValue;
                    writer.WriteAttributeString("TypeId", clientValueObject.TypeId);
                    if (!clientValueObject.CustomWriteToXml(writer, serializationContext))
                    {
                        clientValueObject.WriteToXml(writer, serializationContext);
                        return;
                    }
                }
                else
                {
                    if (objValue is Stream)
                    {
                        Stream stream = (Stream)objValue;
                        writer.WriteAttributeString("Type", "Binary");
                        writer.WriteStartElement(MtomGlobals.XopIncludeLocalName);
                        string text = "http://sharepoint.microsoft.com/" + serializationContext.Context.NextSequenceId.ToString(CultureInfo.InvariantCulture);
                        serializationContext.AddStream(new StreamInfo(text, stream));
                        writer.WriteAttributeString(MtomGlobals.XopIncludeHrefLocalName, "cid:" + text);
                        writer.WriteEndElement();
                        return;
                    }
                    DataConvert.WriteValueHandler writeValueHandler = null;
                    if (DataConvert.s_writeValueHandlers.TryGetValue(objValue.GetType(), out writeValueHandler))
                    {
                        writer.WriteAttributeString("Type", DataConvert.s_writeValueTypeNames[objValue.GetType()]);
                        writeValueHandler(writer, objValue);
                        return;
                    }
                    if (objValue.GetType().IsArray)
                    {
                        writer.WriteAttributeString("Type", "Array");
                        //Edited for .NET Core
                        //using (IEnumerator enumerator = ((Array)objValue).GetEnumerator())
                        IEnumerator enumerator = ((Array)objValue).GetEnumerator();
                        {
                            while (enumerator.MoveNext())
                            {
                                object current = enumerator.Current;
                                writer.WriteStartElement("Object");
                                DataConvert.WriteValueToXmlElement(writer, current, serializationContext);
                                writer.WriteEndElement();
                            }
                            return;
                        }
                    }
                    if (objValue is IDictionary)
                    {
                        writer.WriteAttributeString("Type", "Dictionary");
                        IDictionary           dictionary  = objValue as IDictionary;
                        IDictionaryEnumerator enumerator2 = dictionary.GetEnumerator();
                        while (enumerator2.MoveNext())
                        {
                            object value = enumerator2.Value;
                            if (DataConvert.CouldSerializeDictionaryEntry(value) && enumerator2.Key is string)
                            {
                                writer.WriteStartElement("Property");
                                writer.WriteAttributeString("Name", (string)enumerator2.Key);
                                DataConvert.WriteValueToXmlElement(writer, enumerator2.Value, serializationContext);
                                writer.WriteEndElement();
                            }
                        }
                        return;
                    }
                    //Edited for .NET Core
                    //if (typeof(IEnumerable).IsAssignableFrom(objValue.GetType()) && ExpressionUtility.GetElementType(objValue.GetType()) != null)

                    if (typeof(IEnumerable).GetTypeInfo().IsAssignableFrom(objValue.GetType()) && ExpressionUtility.GetElementType(objValue.GetType()) != null)
                    {
                        writer.WriteAttributeString("Type", "Array");
                        //Edited for .NET Core
                        //using (IEnumerator enumerator3 = ((IEnumerable)objValue).GetEnumerator())
                        IEnumerator enumerator3 = ((IEnumerable)objValue).GetEnumerator();
                        {
                            while (enumerator3.MoveNext())
                            {
                                object current2 = enumerator3.Current;
                                writer.WriteStartElement("Object");
                                DataConvert.WriteValueToXmlElement(writer, current2, serializationContext);
                                writer.WriteEndElement();
                            }
                            return;
                        }
                    }
                    Type type = objValue.GetType();
                    //Edited for .NET Core
                    //if (type.IsEnum)
                    if (type.GetTypeInfo().IsEnum)
                    {
                        writer.WriteAttributeString("Type", "Enum");
                        DataConvert.s_writeValueEnum(writer, objValue);
                        return;
                    }
                    writer.WriteAttributeString("Type", "Unspecified");
                    writer.WriteString(objValue.ToString());
                }
                return;
            }
            ClientObject clientObject = (ClientObject)objValue;

            if (clientObject.Path == null)
            {
                throw new ClientRequestException(Resources.GetString("NoObjectPathAssociatedWithObject"));
            }
            ClientAction.CheckActionParameterInContext(serializationContext.Context, clientObject);
            writer.WriteAttributeString("ObjectPathId", clientObject.Path.Id.ToString(CultureInfo.InvariantCulture));
            serializationContext.AddClientObject(clientObject);
        }