C#将字符串解析为对象
以下案文:C#将字符串解析为对象,c#,.net,C#,.net,以下案文: Item 1: student-pay history 320.00 math 500.10 extra Item 2: history 220.00 math 200.10 我想将此文本解析为一个Item类。有没有更有效的方法 我有以下资料: var result = input.Split( new[] { "item", "Item" }, StringSplitOptions.Rem
Item 1:
student-pay
history 320.00
math 500.10 extra
Item 2:
history 220.00
math 200.10
我想将此文本解析为一个Item类。有没有更有效的方法
我有以下资料:
var result = input.Split(
new[] { "item", "Item" },
StringSplitOptions.RemoveEmptyEntries);
foreach (string item in result)
{
var lineItems = item.Split(
new[] { Environment.NewLine },
StringSplitOptions.RemoveEmptyEntries);
foreach (var lineItem in lineItems.Skip(1)) // remove ":"
{
// split line again
// check if numeric
}
}
public class Course
{
public bool StudentPay { get; set; }
public ICollection<CourseItem> JobItems { get; set; }
}
public class CourseItem
{
public string Name { get; set; }
public decimal Cost { get; set; }
public bool Extra { get; set; }
}
var result=input.Split(
新[]{“项”,“项”},
StringSplitOptions.RemoveEmptyEntries);
foreach(结果中的字符串项)
{
var lineItems=item.Split(
新建[]{Environment.NewLine},
StringSplitOptions.RemoveEmptyEntries);
foreach(lineItems.Skip(1))中的var lineItem//删除“:
{
//再次拆分行
//检查是否为数字
}
}
公共课
{
公立学校学生工资{get;set;}
公共ICollection作业项{get;set;}
}
公共课
{
公共字符串名称{get;set;}
公共十进制成本{get;set;}
公共布尔额外{get;set;}
}
我想以
列表
结束,因为您的数据格式必须手工编写一个一次性解决方案
更好的方法是使用json格式。获取Newtonsoft.json。它是序列化它的一行程序和反序列化程序的一行程序。为文件添加另一行。写并归档。读并离开
使用JsonConvert.Serialize和JsonConvert.Deserialize可以使用大多数类(与xmlserializer不同)。Json可能是更好的解决方案,但它需要控制将输入字符串格式化为Json格式
如果必须使用现有字符串作为输入,我建议您使用正则表达式来解析对象创建的每一行。正则表达式是解决问题的老方法。您可能应该在问题中显示项目类。当你这样做的时候,最好从你的代码中删除所有额外的空白,因为这些空白会使你的代码难以阅读。
Split
不是解析字符串的最佳方法,尤其是当子字符串“item”可能出现在输入的其他地方时。你的问题是什么?如何填写清单?如何创建新项目并使用lineItem填充?让对象保持可读模式并反序列化的最佳方法是什么?有没有更有效的方法?
您的输入不是任何常见的可序列化结构(xml、json)。因此,您可以使代码尽可能地漂亮,但最终您将自己对其进行解析。实际上,我建议序列化您的项目。您甚至可以将它们放在一个数组中并序列化该数组。