Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将字符串解析为对象_C#_.net - Fatal编程技术网

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)。因此,您可以使代码尽可能地漂亮,但最终您将自己对其进行解析。实际上,我建议序列化您的项目。您甚至可以将它们放在一个数组中并序列化该数组。