Esempio n. 1
0
 static DataConvert()
 {
     DataConvert.s_writeValueHandlers  = new Dictionary <Type, DataConvert.WriteValueHandler>();
     DataConvert.s_writeValueTypeNames = new Dictionary <Type, string>();
     DataConvert.s_writeValueHandlers[typeof(bool)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Boolean);
     DataConvert.s_writeValueTypeNames[typeof(bool)]             = "Boolean";
     DataConvert.s_writeValueHandlers[typeof(char)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Char);
     DataConvert.s_writeValueTypeNames[typeof(char)]             = "Char";
     DataConvert.s_writeValueHandlers[typeof(byte)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Byte);
     DataConvert.s_writeValueTypeNames[typeof(byte)]             = "Byte";
     DataConvert.s_writeValueHandlers[typeof(sbyte)]             = new DataConvert.WriteValueHandler(DataConvert.WriteValue_SByte);
     DataConvert.s_writeValueTypeNames[typeof(sbyte)]            = "SByte";
     DataConvert.s_writeValueHandlers[typeof(short)]             = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Int16);
     DataConvert.s_writeValueTypeNames[typeof(short)]            = "Int16";
     DataConvert.s_writeValueHandlers[typeof(ushort)]            = new DataConvert.WriteValueHandler(DataConvert.WriteValue_UInt16);
     DataConvert.s_writeValueTypeNames[typeof(ushort)]           = "UInt16";
     DataConvert.s_writeValueHandlers[typeof(int)]               = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Int32);
     DataConvert.s_writeValueTypeNames[typeof(int)]              = "Int32";
     DataConvert.s_writeValueHandlers[typeof(uint)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_UInt32);
     DataConvert.s_writeValueTypeNames[typeof(uint)]             = "UInt32";
     DataConvert.s_writeValueHandlers[typeof(long)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Int64);
     DataConvert.s_writeValueTypeNames[typeof(long)]             = "Int64";
     DataConvert.s_writeValueHandlers[typeof(ulong)]             = new DataConvert.WriteValueHandler(DataConvert.WriteValue_UInt64);
     DataConvert.s_writeValueTypeNames[typeof(ulong)]            = "UInt64";
     DataConvert.s_writeValueHandlers[typeof(float)]             = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Single);
     DataConvert.s_writeValueTypeNames[typeof(float)]            = "Single";
     DataConvert.s_writeValueHandlers[typeof(double)]            = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Double);
     DataConvert.s_writeValueTypeNames[typeof(double)]           = "Double";
     DataConvert.s_writeValueHandlers[typeof(decimal)]           = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Decimal);
     DataConvert.s_writeValueTypeNames[typeof(decimal)]          = "Decimal";
     DataConvert.s_writeValueHandlers[typeof(TimeSpan)]          = new DataConvert.WriteValueHandler(DataConvert.WriteValue_TimeSpan);
     DataConvert.s_writeValueTypeNames[typeof(TimeSpan)]         = "TimeSpan";
     DataConvert.s_writeValueHandlers[typeof(DateTime)]          = new DataConvert.WriteValueHandler(DataConvert.WriteValue_DateTime);
     DataConvert.s_writeValueTypeNames[typeof(DateTime)]         = "DateTime";
     DataConvert.s_writeValueHandlers[typeof(Guid)]              = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Guid);
     DataConvert.s_writeValueTypeNames[typeof(Guid)]             = "Guid";
     DataConvert.s_writeValueHandlers[typeof(string)]            = new DataConvert.WriteValueHandler(DataConvert.WriteValue_String);
     DataConvert.s_writeValueTypeNames[typeof(string)]           = "String";
     DataConvert.s_writeValueHandlers[typeof(byte[])]            = new DataConvert.WriteValueHandler(DataConvert.WriteValue_ByteArray);
     DataConvert.s_writeValueTypeNames[typeof(byte[])]           = "Base64Binary";
     DataConvert.s_writeValueHandlers[typeof(StringCollection)]  = new DataConvert.WriteValueHandler(DataConvert.WriteValue_StringCollection);
     DataConvert.s_writeValueTypeNames[typeof(StringCollection)] = "Array";
     DataConvert.s_writeValueEnum = new DataConvert.WriteValueHandler(DataConvert.WriteValue_Enum);
     DataConvert.s_strongTypedArrayElementTypeNames             = new Dictionary <string, Type>();
     DataConvert.s_strongTypedArrayElementTypeNames["Boolean"]  = typeof(bool);
     DataConvert.s_strongTypedArrayElementTypeNames["Char"]     = typeof(char);
     DataConvert.s_strongTypedArrayElementTypeNames["Byte"]     = typeof(byte);
     DataConvert.s_strongTypedArrayElementTypeNames["SByte"]    = typeof(sbyte);
     DataConvert.s_strongTypedArrayElementTypeNames["Int16"]    = typeof(short);
     DataConvert.s_strongTypedArrayElementTypeNames["UInt16"]   = typeof(ushort);
     DataConvert.s_strongTypedArrayElementTypeNames["Int32"]    = typeof(int);
     DataConvert.s_strongTypedArrayElementTypeNames["UInt32"]   = typeof(uint);
     DataConvert.s_strongTypedArrayElementTypeNames["Int64"]    = typeof(long);
     DataConvert.s_strongTypedArrayElementTypeNames["UInt64"]   = typeof(ulong);
     DataConvert.s_strongTypedArrayElementTypeNames["DateTime"] = typeof(DateTime);
     DataConvert.s_strongTypedArrayElementTypeNames["Single"]   = typeof(float);
     DataConvert.s_strongTypedArrayElementTypeNames["Double"]   = typeof(double);
     DataConvert.s_strongTypedArrayElementTypeNames["Decimal"]  = typeof(decimal);
     DataConvert.s_strongTypedArrayElementTypeNames["Guid"]     = typeof(Guid);
     DataConvert.s_strongTypedArrayElementTypeNames["String"]   = typeof(string);
     DataConvert.s_strongTypedArrayElementTypeNames["TimeSpan"] = typeof(TimeSpan);
 }
Esempio n. 2
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);
        }