繁体   English   中英

如何使用 NewtonSoft Json 序列化 FileInfo 对象?

[英]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 拥有的两个属性要多得多。 (诸如ExistsDirectoryCreationTimeExtensionIsReadonlyLastAccessTime等属性) 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM