ahm*_*iee 1 .net c# extension-methods .net-4.0 c#-4.0
我正在尝试创建两个方法来使用序列化/反序列化类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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但在LoadFromFile方法data = JsonConvert.DeserializeObject<t>(reader.ReadToEnd());不起作用!这意味着如果我有这个代码:
Class1 c1=new Class1();
c1.LoadFromFile<Class1>("c1.clf");
Run Code Online (Sandbox Code Playgroud)
代码运行后,属性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()));
}
}
Run Code Online (Sandbox Code Playgroud)
这将允许您像这样使用此代码:
Class1 c1 = LoadFromFile<Class1>("c1.clf");
Run Code Online (Sandbox Code Playgroud)
附注:如果使用using构造,则无需显式关闭流读取器
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |