【问题标题】:How to modify the class from it's extension method?如何从它的扩展方法修改类?
【发布时间】:2012-10-09 12:46:29
【问题描述】:

我正在尝试创建两种方法来使用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&lt;t&gt;(reader.ReadToEnd()); 中不起作用!这意味着如果我有这个代码:

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

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

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

【问题讨论】:

  • 请定义“不起作用”!
  • 请阅读您的问题并问问自己是否有任何不在您脑海中的人会理解它。 “修改类”是什么意思?你想达到什么目标? “不起作用”到底是什么意思?
  • @jeroenh:我不明白!
  • 只是一个提示,使用大写“T”作为通用参数是一种常见的命名约定。
  • @jeroenh 表示我们不知道“不起作用”对您意味着什么。错误?例外?错误的行为(如果是,那到底是什么意思)?还有什么?

标签: c# .net c#-4.0 .net-4.0 extension-methods


【解决方案1】:

您的 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 构造,则无需显式关闭流阅读器

【讨论】:

  • 我正在这样做。但它需要创建一个类的实例然后加载它。我不想创建类实例!
  • 请提供更多上下文,可能还有更多关于您如何以及为什么使用它的代码。你的问题不清楚。
  • 我有很多不同的类,我需要将它们的数据保存在文件中并加载它们。我正在寻找一种解决方案,只有一种方法来序列化/反序列化类并从文件中保存/加载它们!
  • 那么为什么这个答案不是解决方案?
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2012-06-10
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多