Beispiel #1
0
        public static void AddToDataRow(this object receiver, DataRow row,
                                        string modelName, WriteSettings settings)
        {
            TkDebug.AssertArgumentNull(receiver, "receiver", null);
            TkDebug.AssertArgumentNull(row, "row", null);
            TkDebug.AssertArgumentNull(settings, "settings", null);

            IObjectSerializer serializer = ObjectExtension.CreateSerializer("DataRow");
            object            writer     = serializer.CreateCustomWriter(row);

            serializer.WriteObject(writer, receiver, modelName, settings, QName.Toolkit, null);
        }
Beispiel #2
0
        public static void AddToDataSet(this object receiver, DataSet dataSet,
                                        string modelName, WriteSettings settings)
        {
            if (receiver == null)
            {
                return;
            }

            TkDebug.AssertArgumentNull(dataSet, "dataSet", null);
            TkDebug.AssertArgumentNull(settings, "settings", null);

            IObjectSerializer serializer = ObjectExtension.CreateSerializer("DataSet");
            object            writer     = serializer.CreateCustomWriter(dataSet);

            serializer.WriteObject(writer, receiver, modelName, settings, QName.Toolkit, null);
        }
Beispiel #3
0
        public static DataTable CreateTable(this IEnumerable list, string tableName,
                                            string modelName, WriteSettings settings)
        {
            TkDebug.AssertArgumentNullOrEmpty(tableName, "tableName", null);
            TkDebug.AssertArgumentNull(settings, "settings", null);

            if (list == null)
            {
                return(null);
            }

            object value = list.Cast <object>().FirstOrDefault();

            if (value == null)
            {
                return(null);
            }

            ObjectInfo info  = ObjectInfo.Create(value, modelName);
            DataTable  table = new DataTable(tableName)
            {
                Locale = ObjectUtil.SysCulture
            };

            CreateTableStructure(info, table);
            IObjectSerializer serializer = ObjectExtension.CreateSerializer("DataRow");

            foreach (var item in list)
            {
                DataRow row    = table.NewRow();
                object  writer = serializer.CreateCustomWriter(row);
                serializer.WriteObject(writer, item, null, settings, QName.Toolkit, null);
                table.Rows.Add(row);
            }
            return(table);
        }
Beispiel #4
0
        public static void WriteObject(IObjectSerializer serializer, object writer,
                                       object receiver, string modelName, WriteSettings settings, QName root,
                                       BaseObjectAttribute attribute, object serializerData, SerializerOptions options)
        {
            Type type = receiver.GetType();

            if (receiver is IDictionary)
            {
                BaseDictionaryAttribute attr = attribute as BaseDictionaryAttribute;
                options.CheckWriteDictionary(serializer, attr);
                if (attr == null)
                {
                    attr = GetDictionaryAttribute(receiver, root);
                }
                serializer.WriteDictionary(writer, receiver.Convert <IDictionary>(), attr,
                                           modelName, settings, root, serializerData);
            }
            else if (type.IsArray || receiver is IList)
            {
                SimpleElementAttribute attr = attribute as SimpleElementAttribute;
                options.CheckWriteList(serializer, attr);
                if (attr == null)
                {
                    Type valueType;
                    if (type.IsArray)
                    {
                        Array arr = receiver as Array;
                        if (arr.Length == 0)
                        {
                            return;
                        }
                        var enumerator = arr.GetEnumerator();
                        enumerator.MoveNext();
                        valueType = enumerator.Current.GetType();
                    }
                    else
                    {
                        valueType = ObjectUtil.GetListValueType(type, "", null);
                    }
                    attr = GetElementAttribute(receiver, valueType);
                }
                serializer.WriteList(writer, receiver.Convert <IEnumerable>(), attr,
                                     modelName, settings, root, serializerData);
            }
            else
            {
                options.CheckWriteObject(serializer);
                ITkTypeConverter converter = TkTypeDescriptor.GetSimpleConverter(type);
                if (converter != null)
                {
                    SimpleElementAttribute simpleAttr = new SimpleElementAttribute
                    {
                        LocalName    = root.LocalName,
                        NamespaceUri = root.Namespace
                    };
                    var info = new SimpleObjectPropertyInfo(receiver, type, simpleAttr, converter);
                    serializer.WriteElement(simpleAttr, writer, receiver, settings, info, serializerData);
                }
                else
                {
                    serializer.WriteObject(writer, receiver, modelName, settings, root, serializerData);
                }
            }
        }