Example #1
0
        public void ReadObjectElement(ObjectElementAttribute attribute, object reader, object receiver,
                                      ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            DataTable table = serializerData.Convert <DataTable>();

            if (table.Rows.Count == 0)
            {
                return;
            }

            Type objectType = info.ObjectType;
            IObjectSerializer rowSerializer = ObjectExtension.CreateSerializer("DataRow");

            if (attribute.IsMultiple)
            {
                IList list = attribute.GetList(receiver, info);
                foreach (DataRow row in table.Rows)
                {
                    object subObject = ReadObject(attribute.UseConstructor, settings, row, objectType,
                                                  receiver, rowSerializer, info.ModelName);
                    list.Add(subObject);
                }
            }
            else
            {
                object subObject = ReadObject(attribute.UseConstructor, settings, table.Rows[0],
                                              objectType, receiver, rowSerializer, info.ModelName);
                info.SetValue(receiver, subObject);
            }
        }
Example #2
0
        public void ReadObjectElement(ObjectElementAttribute attribute, object reader,
                                      object receiver, ReadSettings settings, ObjectPropertyInfo info, object serializerData)
        {
            JsonTextReader jsonReader = reader.Convert <JsonTextReader>();
            Type           objectType = info.ObjectType;

            // 考虑支持多层次Array读取,外层Object可能读取过,所以这里做判断对此进行屏蔽 2019.6.24
            if (jsonReader.TokenType != JsonToken.StartArray)
            {
                AssertRead(jsonReader);
            }

            if (attribute.IsMultiple)
            {
                IList list = attribute.GetList(receiver, info);
                if (attribute.UseJsonObject)
                {
                    bool useArray = jsonReader.TokenType == JsonToken.StartArray;
                    if (useArray)
                    {
                        while (jsonReader.Read())
                        {
                            if (jsonReader.TokenType == JsonToken.EndArray)
                            {
                                break;
                            }
                            object subObject = ReadObject(attribute.UseConstructor, settings,
                                                          jsonReader, objectType, receiver, info.ModelName);
                            list.Add(subObject);
                        }
                    }
                    else
                    {
                        object subObject = ReadObject(attribute.UseConstructor, settings,
                                                      jsonReader, objectType, receiver, info.ModelName);
                        list.Add(subObject);
                    }
                }
                else
                {
                    AssertReadState(jsonReader, JsonToken.StartArray, info.PropertyName);
                    while (jsonReader.Read())
                    {
                        if (jsonReader.TokenType == JsonToken.EndArray)
                        {
                            break;
                        }
                        object subObject = ReadObject(attribute.UseConstructor, settings,
                                                      jsonReader, objectType, receiver, info.ModelName);
                        list.Add(subObject);
                    }
                }
            }
            else
            {
                AssertReadState(jsonReader, JsonToken.StartObject, info.PropertyName);

                object subObject = ReadObject(attribute.UseConstructor, settings, jsonReader,
                                              objectType, receiver, info.ModelName);
                info.SetValue(receiver, subObject);
            }
        }