1

我正在尝试创建两种方法来序列化/反序列化类使用Json.Net并将它们保存/加载到/从文件中,这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Newtonsoft.Json;
using System.Security.Cryptography;
using System.Text.RegularExpressions;

namespace System
{
    public static class SystemExtentions
    {
        public static void SaveToFile(this object data, string FileName)
        {
            using (StreamWriter writer = new StreamWriter(FileName))
            {
                string s = JsonConvert.SerializeObject(data);
                writer.Write(s);
                writer.Close();
            }
        }

        public static void LoadFromFile<t>(t date,string FileName)
        {
            using (StreamReader reader = new StreamReader(FileName))
            {

                data = JsonConvert.DeserializeObject<t>(reader.ReadToEnd());
                reader.Close();
            }
        }
    }
}

但在LoadFromFile方法data = JsonConvert.DeserializeObject<t>(reader.ReadToEnd());不起作用!这意味着如果我有这个代码:

Class1 c1=new Class1();
c1.LoadFromFile<Class1>("c1.clf");

代码运行后的属性c1不会改变。

我想知道为什么以及是否有任何解决方案可以LoadFromFile以独立(独立于类类型和属性)(动态)方式修改类或设置它的属性(反序列化它!)?

4

1 回答 1

5

您的 LoadFromFile 方法采用t您在方法内部分配的类型参数。这根本不符合逻辑。相反,使用返回值:

public static T LoadFromFile<T>(string fileName)
{
    using (StreamReader reader = new StreamReader(FileName))
    {
       return JsonConvert.DeserializeObject<T>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));
    }
}

这将允许您像这样使用此代码:

Class1 c1 = LoadFromFile<Class1>("c1.clf");

旁注:如果您使用该using构造,则无需显式关闭流阅读器

于 2012-10-09T12:52:41.757 回答