繁体   English   中英

如何在C#中从文本文件写入和读取list <>

[英]How to write and read list<> from text files in C#

英语不是我的母语,我是新手,所以请不要嘲笑我。

我想在C#中创建一个类,以帮助我将数据保存到文件中并轻松读取它们。 它是这样的:

RealObject john = new RealObject("John");
john.AddCharacter("Full Name", "Something John");
john.AddCharacter("Grade", new List<double> { 9.9, 8.8, 7.7 });
await john.SaveToFileAsync("Test.ini");

RealObject student = new RealObject("John");
await student.ReadFromFileAsync("Test.ini");
Type valueType = student.GetCharacter("Grade").Type;
List<double> johnGrade = (List<double>) student.GetCharacter("Grade").Value;

文件“ Test.ini”如下所示:

S_Obj_John
Name    System.String   Something John
Grade   System.Collections.Generic.List`1[System.Double]    9.9;8.8;7.7
E_Obj_John

我有一些疑问:

问题1.请给我一些可以为我完成这项工作的图书馆吗?

问题2.我的代码太冗余了,如何优化它?

2.1保存代码:我必须编写类似的函数:ByteListToString,IntListToString,DoubleListToString,...

    private static string ListToString(Type listType, object listValue)
    {
        string typeString = GetBaseTypeOfList(listType);
        if (typeString == null)
        {
            return null;
        }
        switch (typeString)
        {
            case "Byte":
                return ByteListToString(listValue);
            ..........
            default:
                return null;
        }
    }
    private static string ByteListToString(object listValue)
    {
        List<byte> values = (List<byte>) listValue;
        string text = "";
        for (int i = 0; i < values.Count; i++)
        {
            if (i > 0)
            {
                text += ARRAY_SEPARATING_SYMBOL;
            }
            text += values[i].ToString();
        }
        return text;
    }

2.2读取代码:我必须编写类似的函数:StringToByteList,StringToIntList,StringToDoubleList,...

    public static object StringToList(Type listType, string listValueString)
    {
        string typeString = GetBaseTypeOfList(listType);
        if (typeString == null)
        {
            return null;
        }
        switch (typeString)
        {
            case "Byte":
                return StringToByteList(listValueString);
            ..........
            default:
                return null;
        }
    }
    private static List<byte> StringToByteList(string listValueString)
    {
        var valuesString = listValueString.Split(ARRAY_SEPARATING_SYMBOL);
        List<byte> values = new List<byte>(valuesString.Length);
        foreach (var v in valuesString)
        {
            byte tmp;
            if (byte.TryParse(v, out tmp))
            {
                values.Add(tmp);
            }
        }
        return values;
    }

谢谢您的帮助

有两种常用的方法来“序列化”数据,这是一种获取对象并将其转换为字符串的理想方法。 然后,在另一侧,您可以“反序列化”该字符串,然后将其转换回一个对象。 许多人喜欢JSON,因为它非常简单,仍然使用XML,它对于复杂的结构可能很有用,但是对于简单的类,JSON确实很棒。

我将检查https://www.json.org/并进行探索,存在可以为您序列化和反序列化的库,这很好。 不建议尝试使用字符串操作来完成它,因为大多数人(包括我)都会把它弄乱。

但是,该想法是从对象开始和结束,因此获取一个对象并将其序列化以将其保存到文件中。 然后读取该对象(实际上只是文件中的字符串或文本行)并将其反序列化为一个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM