我正在从CSV文件中读取行并将其加载到对象列表中。我需要将每个对象都转换为JSON,但是到目前为止,我尝试的所有操作(如JsonConvert.SerializeObject
都无法正常工作。
该行与以下内容完全相同(从CSV复制):
{ email = premium22@utoo.email, name = Premium Dois CEDRO, ip = 0.0.0.1,
action = login, timeStamp = 2019-06-12 13:30:11Z }
当我读取并加载时,对象看起来像这样:
"{ email = premium22@utoo.email, name = Premium Dois CEDRO, ip = 0.0.0.1,
action = login, timeStamp = 11/06/2019 17:44:03 }"
在列表中加载逗号时,会将逗号放在对象中,并将双引号放在每个对象周围。 最后,当我使用SerializeObject时,它返回以下内容:
"[\"{ email = premium22@utoo.email, name = Premium Dois CEDRO, ip =
0.0.0.1, action = login, timeStamp = 2019-06-12 13:30:11Z }\"
我需要的输出是一个像这样的Json:
{
"email": "premium22@utoo.email",
"name": "Premium Dois CEDRO",
"ip": "0.0.0.1",
"action": "login",
"timeStamp": "2019-06-11T18:50:02.0091122Z"
}
要从文件和加载列表中读取的代码:
using (var reader = new StreamReader($"{filePath}CONTINGENCY AUDIT LOG.csv"))
{
List<object> contingencyList = new List<object>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
contingencyList.Add(line);
}
string jsonList = JsonConvert.SerializeObject(contingencyList);
reader.Close();
return contingencyList;
}
要遍历列表的代码:
foreach (object item in contingencyList)
{ Console.WriteLine(item);
}
答案 0 :(得分:0)
即使源格式看起来不像.csv文件,您也需要遵循以下步骤来实现这种任务:
public class MyClass
{
public string Email { get; set; }
public string Name {get; set; }
// ... and so on with other properties
public MyClass(string csvLine)
{
// Here parse the line and fill the properties
}
}
System.Web.Script.Serialization.JavaScriptSerializer().Serialize(string)
:public class MyClass
{
// ...
public override string ToString()
{
return new JavaScriptSerializer().Serialize(this);
}
}
您的代码将类似于:
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
MyClass mc = new MyClass(line);
string jsonString = mc.ToString();
}
答案 1 :(得分:0)
如果可能,请通过删除诸如email =
之类的列说明来正确获取CSV文件的格式,并确保设置诸如;
之类的适当列分隔符。
最后,您的文件应如下所示:
email@example.com;ExampleName;127.0.0.1;login;2019-06-12 13:30:11Z
email2@example.com;ExampleName2;0.0.0.1;logout;2019-06-12 13:30:11Z
然后定义一个新类:
public class CSVEntry
{
public string Email { get; set }
public string Name { get; set; }
public IPAddress IPAddress { get; set; }
public string Action { get; set; }
public DateTime Timestamp { get; set; }
public CSVEntry(string email, string name, IPAddress ip, string action, DateTime timestamp)
{
Email = email;
Name = name;
IPAddress = ip;
Action = action;
Timestamp = timestamp;
}
public static CSVEntry Parse(string csvLine)
{
string[] args = csvLine.Split(';');
if (args.Length >= 5)
{
string email = args[0];
string name = args[1];
IPAddress ip = IPAddress.Parse(args[2]);
string action = args[3];
DateTime timestamp = DateTime.Parse(args[4]);
return new CSVEntry(email, name, ip, action, timestamp);
}
return null;
}
}
如果无法更改格式,则需要使用regex
之类的其他方法来解析csv行。
接下来,逐行浏览CSV文件,使用CSVEntry.Parse(line);
创建对象并将其添加到List<CSVEntry>
中,例如:
var list = new List<CSVEntry>();
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
list.Add(CSVEntry.Parse(line));
}
然后,您可以使用JsonConvert.SerializeObject(list);