注册 登录
编程论坛 C# 论坛

C#的字典是否可以形成一个单独的文件?

ilsoviet1917 发布于 2022-08-11 18:14, 2042 次点击
写程序的时候,需要建立字典,但是字典里内容太多,写在类里看着很乱。能否让字典独立成某种文件,这样也方便修改。
并且,如何引用这个独立出来的文件?
5 回复
#2
apull2022-08-12 08:33
如果是读写的,建议用sqlite等数据库保存。
如果只是读取,用json,txt文件保存。
程序运行后加载字典数据。
#3
ilsoviet19172022-08-13 10:13
回复 2楼 apull
把字典写入txt再调用,能给写个例子吗?
比如需要匹配KEY,输出VALUE
#4
apull2022-08-13 11:31
以下是引用ilsoviet1917在2022-8-13 10:13:46的发言:

把字典写入txt再调用,能给写个例子吗?
比如需要匹配KEY,输出VALUE


txt保存成2列
key    value //此行可不要。
a    1
b    2
c    3
d    4
e    5
读取文件遍历一下,数据量不大,可以整个读取到内存中使用提高效率。
#5
qq28895779662022-08-15 20:11
对字典不熟,序列化一个文件,读取反序列化,这样子应该可以了吧

引用里面添加 System.Runtime.Serialization

程序代码:

using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Direct
{
    public partial class Form1 : Form
    {
        [DataContract]
        public class MyClass
        {
            [DataMember]
            public Dictionary<int, string> myDictionary = new Dictionary<int, string>();
        }
        MyClass myClass = new MyClass();

        public Form1()
        {
            InitializeComponent();

            myClass.myDictionary.Add(1, "C#");
            myClass.myDictionary.Add(2, "C++");
            myClass.myDictionary.Add(3, "");
            myClass.myDictionary.Add(4, "MVC");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ObjectToJson(myClass, "123.json");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            myClass.myDictionary.Clear();
            myClass =JsonFileToObject<MyClass>("123.json");
        }

        /// 将对象序列化为json文件
        public static void ObjectToJson<T>(T t, string path) where T : class
        {
            DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
            using (FileStream stream = new FileStream(path, FileMode.Create))
            {
                formatter.WriteObject(stream, t);
            }
        }

        /// json字符串转成对象
        public static T JsonToObject<T>(string json) where T : class
        {
            DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
            using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
            {
                T result = formatter.ReadObject(stream) as T;
                return result;
            }
        }

        /// json文件转成对象
        public static T JsonFileToObject<T>(string path) where T : class
        {
            string str = File.ReadAllText(path, Encoding.UTF8);
            return JsonToObject<T>(str);
        }
    }
}



[此贴子已经被作者于2022-8-15 20:13编辑过]

#6
pvm20002022-12-28 00:42
回复 4楼 apull
正解
1