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); } }
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); } }