![](/img/trans.png)
[英]How to serialize object to json with type info using Newtonsoft.Json?
[英]How to serialize FileInfo object using NewtonSoft Json?
我想使用 json 序列化FileInfo
对象。 到目前为止,我在使用JsonConvert.serializeOjbect()
方法序列化文件信息对象时得到以下结果。
FileInfo finfo = new FileInfo("drive:\\folderpath\\file.txt");
string jsonString = JsonConvert.SerializeObject(finfo);
当然, finfo
拥有的属性比 jsonString 拥有的两个属性要多得多。 (诸如Exists
、 Directory
、 CreationTime
、 Extension
、 IsReadonly
、 LastAccessTime
等属性) jsonstring
仅包含其中两个属性。
jsonString = {{
"OriginalPath": "drive:\\folderpath\\file.txt",
"FullPath": "drive:\\folderpath\\file.txt"
}}
有没有办法使用 Json 序列化整个对象而不是这两个属性?
您只看到这两个属性的原因是FileInfo
实现了ISerializable
接口,并且它的GetObjectInfo
方法用于覆盖默认的序列化行为。 如果您完全控制FileInfo
类(您没有),那么您可以应用 [JsonObject] 属性来强制正常的 Json 序列化行为。
我认为在这种情况下,您唯一的选择是编写自己的包含所需属性的包装器。 您的属性可以直接调用底层FileInfo
属性。
我正在尝试继续使用#RogerN 评论“您的属性可以直接调用底层 FileInfo 属性”
我看不到如何在不使用完全独立的数据类型的情况下进行序列化/反序列化。 我可以采用 FileInfo 进行序列化并使用 JSON 值进行反序列化的任何方式吗? 这是我想出的最好的和“对象引用未设置为对象的实例”错误
void Main()
{
var res = Directory.GetFiles(@"C:\Users\kelly\OneDrive\Code\LinqPAD6 Portable\")
.Take(3)
.Select(d => new MyFileInfo2(new FileInfo(d)));
var jsonPath = @"C:\Users\Public\Documents\tst.json";
var json = System.Text.Json.JsonSerializer.Serialize(res, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(jsonPath, json);
Thread.Sleep(100);
json = File.ReadAllText(jsonPath);
var readFromJson = System.Text.Json.JsonSerializer.Deserialize<List<MyFileInfo2>>(json);
readFromJson.Dump();
}
public class MyFileInfo2
{
private readonly FileInfo _fi;
public MyFileInfo2(FileInfo fi)
{
_fi = fi;
Path = fi.FullName;
Size = fi.Length;
}
public MyFileInfo2()
{
}
public string Path
{
get
{
return _fi.FullName;
}
set
{
value = Path;
}
}
public long Size { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.