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

atp*_*tp9 5 c# serialization json.net

我想FileInfo使用 json 序列化对象。到目前为止,我在使用JsonConvert.serializeOjbect()方法序列化文件信息对象时得到以下结果。

FileInfo finfo = new FileInfo("drive:\\folderpath\\file.txt");
string jsonString = JsonConvert.SerializeObject(finfo);
Run Code Online (Sandbox Code Playgroud)

当然,finfo比 jsonString 拥有的两个属性拥有更多的属性。Exists(诸如、Directory、CreationTime、Extension、IsReadonly、LastAccessTime等 属性)jsonstring仅包含其中两个属性。

jsonString = {{
  "OriginalPath": "drive:\\folderpath\\file.txt",
  "FullPath": "drive:\\folderpath\\file.txt"
}}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 Json 序列化整个对象而不是这两个属性?

Rog*_*erN 5

您只看到这两个属性的原因是因为FileInfo实现了ISerializable接口,并且其GetObjectInfo方法用于覆盖默认的序列化行为。如果您可以完全控制该类FileInfo(但您没有),那么您可以应用 [JsonObject] 属性来强制正常的 Json 序列化行为。

我认为在这种情况下,您唯一的选择是编写自己的包装器,其中包含您想要的属性。您的属性可以直接调用底层FileInfo属性。