标题:C#的字典是否可以形成一个单独的文件?
只看楼主
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
结帖率:84.21%
已结贴  问题点数:20 回复次数:5 
C#的字典是否可以形成一个单独的文件?
写程序的时候,需要建立字典,但是字典里内容太多,写在类里看着很乱。能否让字典独立成某种文件,这样也方便修改。
并且,如何引用这个独立出来的文件?
搜索更多相关主题的帖子: 文件 引用 C# 字典 是否 
2022-08-11 18:14
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
如果是读写的,建议用sqlite等数据库保存。
如果只是读取,用json,txt文件保存。
程序运行后加载字典数据。
收到的鲜花
  • 龙胆草2022-12-29 14:59 送鲜花  1朵   附言:同意
2022-08-12 08:33
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
回复 2楼 apull
把字典写入txt再调用,能给写个例子吗?
比如需要匹配KEY,输出VALUE
2022-08-13 10:13
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
以下是引用ilsoviet1917在2022-8-13 10:13:46的发言:

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


txt保存成2列
key    value //此行可不要。
a    1
b    2
c    3
d    4
e    5
读取文件遍历一下,数据量不大,可以整个读取到内存中使用提高效率。
2022-08-13 11:31
qq2889577966
Rank: 4
等 级:业余侠客
威 望:5
帖 子:57
专家分:267
注 册:2021-4-14
得分:0 
对字典不熟,序列化一个文件,读取反序列化,这样子应该可以了吧

引用里面添加 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编辑过]

收到的鲜花
  • 龙胆草2022-09-16 08:23 送鲜花  1朵  
2022-08-15 20:11
pvm2000
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:24
帖 子:159
专家分:256
注 册:2022-12-22
得分:0 
回复 4楼 apull
正解
2022-12-28 00:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509762-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057657 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved