C# 如何从中修改类';s扩展方法?

C# 如何从中修改类';s扩展方法?,c#,.net,c#-4.0,.net-4.0,extension-methods,C#,.net,C# 4.0,.net 4.0,Extension Methods,我正在尝试创建两个方法来使用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.RegularExpressio

我正在尝试创建两个方法来使用
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();
            }
        }
    }
}
代码运行后,
c1
的属性不会更改


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

你的LoadFromFile方法接受你在方法内部分配的
t
类型的参数。这是没有道理的。相反,请使用返回值:

public static T LoadFromFile<T>(string fileName)
{
    using (StreamReader reader = new StreamReader(FileName))
    {
       return JsonConvert.DeserializeObject<T>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));
    }
}
publicstatict LoadFromFile(字符串文件名)
{
使用(StreamReader=新StreamReader(文件名))
{
返回JsonConvert.DeserializeObject(WpfApplication.Helper.Decrypt(reader.ReadToEnd());
}
}
这将允许您像这样使用此代码:

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

旁注:如果使用
using
construct

则无需显式关闭streamreader。LoadFromFile方法采用的参数类型为
t
,是在方法内部指定的。这是没有道理的。相反,请使用返回值:

public static T LoadFromFile<T>(string fileName)
{
    using (StreamReader reader = new StreamReader(FileName))
    {
       return JsonConvert.DeserializeObject<T>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));
    }
}
publicstatict LoadFromFile(字符串文件名)
{
使用(StreamReader=新StreamReader(文件名))
{
返回JsonConvert.DeserializeObject(WpfApplication.Helper.Decrypt(reader.ReadToEnd());
}
}
这将允许您像这样使用此代码:

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

旁注:如果您使用
使用
构造

请定义“不工作”,则无需显式关闭streamreader!请阅读你的问题,问问你自己,是否有任何不在你头脑中的人会理解它。“修改类”是什么意思?你想要实现什么?“不起作用”到底是什么意思?@jeroenh:我不明白!提示一下,使用大写“T”作为泛型参数是一种常见的命名约定。@jeroenh的意思是我们不知道“不起作用”对您意味着什么。错误?例外情况?错误行为(如果是,这到底意味着什么)?还有什么?请定义“不起作用”!请阅读你的问题,问问你自己,是否有任何不在你头脑中的人会理解它。“修改类”是什么意思?你想要实现什么?“不起作用”到底是什么意思?@jeroenh:我不明白!提示一下,使用大写“T”作为泛型参数是一种常见的命名约定。@jeroenh的意思是我们不知道“不起作用”对您意味着什么。错误?例外情况?错误行为(如果是,这到底意味着什么)?还有别的吗?我是这样做的。但它需要创建类的实例,然后加载它。我不想创建一个类的instance!请提供更多的上下文,可能还有更多关于如何以及为什么使用它的代码。你的问题不清楚。我有很多不同的类,我需要将它们的数据保存在文件中并加载它们。我正在寻找一个解决方案,只需要一个方法来序列化/反序列化类,并从文件中保存/加载它们!那么为什么这个答案不是一个解决方案呢?我就是这么做的。但它需要创建类的实例,然后加载它。我不想创建一个类的instance!请提供更多的上下文,可能还有更多关于如何以及为什么使用它的代码。你的问题不清楚。我有很多不同的类,我需要将它们的数据保存在文件中并加载它们。我正在寻找一个解决方案,只需要一个方法来序列化/反序列化类,并从文件中保存/加载它们!那么为什么这个答案不是一个解决方案呢?