66using System . Linq ;
77using System . Text ;
88using Microsoft . EntityFrameworkCore ;
9+ using Microsoft . EntityFrameworkCore . ChangeTracking . Internal ;
910
1011namespace FileContextCore . Serializer
1112{
12- class CSVSerializer : ISerializer
13+ class CSVSerializer < T > : ISerializer
1314 {
1415 private IEntityType entityType ;
16+ private readonly IPrincipalKeyValueFactory < T > _keyValueFactory ;
1517 private string [ ] propertyKeys ;
1618 private readonly Type [ ] typeList ;
1719
18- public CSVSerializer ( IEntityType _entityType )
20+ public CSVSerializer ( IEntityType _entityType , IPrincipalKeyValueFactory < T > _keyValueFactory )
1921 {
2022 entityType = _entityType ;
23+ this . _keyValueFactory = _keyValueFactory ;
2124 propertyKeys = entityType . GetProperties ( ) . Select ( p => p . Relational ( ) . ColumnName ) . ToArray ( ) ;
2225 typeList = entityType . GetProperties ( ) . Select ( p => p . GetValueConverter ( ) ? . ProviderClrType ?? p . ClrType ) . ToArray ( ) ;
2326 }
@@ -37,7 +40,6 @@ public Dictionary<TKey, object[]> Deserialize<TKey>(string list, Dictionary<TKey
3740
3841 while ( reader . Read ( ) )
3942 {
40- TKey key = ( TKey ) reader . GetField ( 0 ) . Deserialize ( typeof ( TKey ) ) ;
4143 List < object > value = new List < object > ( ) ;
4244
4345 for ( int i = 0 ; i < propertyKeys . Length ; i ++ )
@@ -46,6 +48,9 @@ public Dictionary<TKey, object[]> Deserialize<TKey>(string list, Dictionary<TKey
4648 value . Add ( val ) ;
4749 }
4850
51+ TKey key = SerializerHelper . GetKey < TKey , T > ( _keyValueFactory , entityType ,
52+ propertyName => reader . GetField ( propertyName ) ) ;
53+
4954 newList . Add ( key , value . ToArray ( ) ) ;
5055 }
5156
@@ -57,8 +62,6 @@ public string Serialize<TKey>(Dictionary<TKey, object[]> list)
5762 StringWriter sw = new StringWriter ( ) ;
5863 CsvWriter writer = new CsvWriter ( sw ) ;
5964
60- writer . WriteField ( "Key" ) ;
61-
6265 for ( int i = 0 ; i < propertyKeys . Length ; i ++ )
6366 {
6467 writer . WriteField ( propertyKeys [ i ] ) ;
@@ -68,8 +71,6 @@ public string Serialize<TKey>(Dictionary<TKey, object[]> list)
6871
6972 foreach ( KeyValuePair < TKey , object [ ] > val in list )
7073 {
71- writer . WriteField ( val . Key . Serialize ( ) ) ;
72-
7374 for ( int i = 0 ; i < propertyKeys . Length ; i ++ )
7475 {
7576 writer . WriteField ( val . Value [ i ] . Serialize ( ) ) ;
0 commit comments