序列化和反序列化 metadata-extractor-dotnet

Serialize and de-serialize metadata-extractor-dotnet

我正在对上传图像的元数据进行序列化,以便能够将其保存在数据库中。

可以使用 Newtonsoft 的自定义 JsonConverter 序列化数据 (JSON.NET) - 但是反序列化失败:

(IReadOnlyList<MetadataExtractor.Directory>)JsonConvert.DeserializeObject(metadata)

除了这个例外:

An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code

Additional information: Could not create an instance of type MetadataExtractor.Directory. Type is an interface or abstract class and cannot be instantiated. Path '[0].Name', line 1, position 9.

由于目录列表可能会因具体对象而异,我怀疑单独 serialize/de-serialize 目录是否简单。

关于如何仅将上传图片的元数据部分保存为以后可以重复使用的形式,有什么简单的建议吗?

元数据提取器不支持序列化,尽管 Java 版本中有一个 active issue 目前正在讨论这个问题。

那里的部分问题也适用于此——这完全取决于您为什么要序列化数据。如果您需要它的完全保真度,这比您只想 save/restore 一些 属性 描述要多得多。

您可以使用类似 XML 的方式编写描述:

var doc = new XDocument(
    new XElement("Metadata",
        directories.Select(directory =>
            new XElement("Directory",
                new XAttribute("Name", directory.Name),
                directory.Tags.Select(tag =>
                    new XElement("Tag",
                        new XAttribute("Id", tag.Type.ToString("X"),
                        new XAttribute("Name", tag.Name),
                        tag.Description))))));

这会产生 XML 类似于:

<Metadata>
  <Directory Name="Exif IFD0">
    <Tag Id="10F" Name="Make">NIKON</Tag>
    <Tag Id="110" Name="Model">COOLPIX P340</Tag>
    ...