рджрд╛рдпрд░ рдП, рдлреАрд▓реНрдб рдмреА, рдлреАрд▓реНрдб рд╕реА
рдПрдХ рдХрдХреНрд╖рд╛
{
рдлрд╝реАрд▓реНрдб рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВ;
рд╕реНрдЯреНрд░рд┐рдВрдЧ jsonvalues;
}
рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ,
рдХреНрд▓рд╛рд╕ рдП = рдЧреЗрдЯрд░рд┐рдХреЙрд░реНрдб
рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рд┐рдП:
рдП.рдлрд╝реАрд▓реНрдбрдП=1
a.jsonvalues={"fieldB":"a",,"fieldC":"3"}
рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдПрдХ рдЯрд╛рдЗрдк рдХрдирд╡рд░реНрдЯрд░ рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдореЙрдбрд▓ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдПрдХ рдХрдХреНрд╖рд╛ {
рдлреАрд▓реНрдбрдП рдЯрд╛рдЗрдк рдХрд░реЗрдВ;
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлреАрд▓реНрдбрдмреА;
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлреАрд▓реНрдбрд╕реА;
[рдзреНрдпрд╛рди рди рджреЗрдирд╛]
рд╕реНрдЯреНрд░рд┐рдВрдЧ jsonvalues тАЛтАЛ{рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ => рдирдпрд╛ {рдлрд╝реАрд▓реНрдбрдмреА = рдлрд╝реАрд▓реНрдбрдмреА, рдлрд╝реАрд▓реНрдбрд╕реА = рдлрд╝реАрд▓реНрдбрд╕реА}; };
}
рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдЯрд░ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдХреЙрд▓рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдЯрд░ рд╣реИред
рд╢реБрдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдПрдХ рд╕реАрдзрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореИрдкрд┐рдВрдЧ рдирд╣реАрдВуАВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╕реАрд╡реАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдП:
рджрд╛рдпрд░ рдП, рдлреАрд▓реНрдб рдмреА, рдлреАрд▓реНрдб рд╕реА
1, "рдП", 3
рд╕реАрд╡реАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдмреА:
рджрд╛рдпрд░ рдП, рдлреАрд▓реНрдб рдмреА, рдлреАрд▓реНрдб рдбреА, рдлреАрд▓реНрдб рдИ
2,"рдП",2019/02/01,"рдЯреЙрдо"
рдПрдХ рдХрдХреНрд╖рд╛
{
рдлрд╝реАрд▓реНрдб рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВ;
рд╕реНрдЯреНрд░рд┐рдВрдЧ jsonvalues;
}
рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ,
рдХреНрд▓рд╛рд╕ рдП = GetRecord () // рд╕реАрд╡реАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдП рд╕реЗ
ClassA b=GetRecord ()// рд╕реАрд╡реАрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдмреА рд╕реЗ
рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рд┐рдП:
рдП.рдлрд╝реАрд▓реНрдбрдП=1
a.jsonvalues={"fieldB":"a",,"fieldC":"3"}
рдЦ.рдлрд╝реАрд▓реНрдбрдП=2
b.jsonvalues={"fieldB":"a",,"fieldD":"2019/02/01",,"FieldE":"tom"}
рдХреИрд╕реЗ рдХрд░реЗрдВ?
void Main()
{
var s = new StringBuilder();
s.AppendLine("FieldA,FieldB,FieldC");
s.AppendLine("1,\"a\",3");
using (var reader = new StringReader(s.ToString()))
using (var csv = new CsvReader(reader))
{
csv.Configuration.RegisterClassMap<ClassAMap>();
csv.Configuration.RegisterClassMap<JsonDataMap>();
csv.GetRecords<ClassA>().ToList().Dump();
}
}
public class ClassA
{
public int FieldA { get; set; }
public string Json { get; set; }
}
public class ClassAMap : ClassMap<ClassA>
{
public ClassAMap()
{
Map(m => m.FieldA);
Map(m => m.Json).ConvertUsing(row =>
{
var jsonData = row.GetRecord<JsonData>();
return JsonConvert.SerializeObject(jsonData);
});
}
}
public class JsonData
{
public string FieldB { get; set; }
public int FieldC { get; set; }
}
public class JsonDataMap : ClassMap<JsonData>
{
public JsonDataMap()
{
Map(m => m.FieldB);
Map(m => m.FieldC);
}
}
рдзрдиреНрдпрд╡рд╛рдж: рдЬреЛрд╢ рдХреНрд▓реЛрдЬ, рдкрд╛рдпрдиреЗрдЬред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд╣ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
static void Main(string[] args)
{
var s = new StringBuilder();
s.AppendLine("FieldA,FieldB,FieldC");
s.AppendLine("1,\"a\",3");
using (var reader = new StringReader(s.ToString()))
using (var csv = new CsvReader(reader))
{
csv.Configuration.RegisterClassMap<ClassAMap>();
csv.GetRecords<ClassA>().ToList();
}
}
public class ClassA
{
public int FieldA { get; set; }
public string Json { get; set; }
}
public class ClassAMap : ClassMap<ClassA>
{
public ClassAMap()
{
Map(m => m.FieldA);
Map(m => m.Json).ConvertUsing(row =>
{
Dictionary<string, string> records = new Dictionary<string, string>();
List<string> fieldHeaderList = new List<string>(row.Context.HeaderRecord);
fieldHeaderList.Remove("FieldA");
foreach (string field in fieldHeaderList)
{
records.Add(field, row.GetField(field));
}
return JsonConvert.SerializeObject(records);
});
}
}