【问题标题】:Serialize and de-serialize metadata-extractor-dotnet序列化和反序列化 metadata-extractor-dotnet
【发布时间】:2017-01-13 14:11:21
【问题描述】:

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

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

(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.

由于目录列表可能因特定对象而异,我怀疑单独对目录进行序列化/反序列化是微不足道的。

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

【问题讨论】:

  • 您的元数据是什么样的?你也可以发一下吗?

标签: c# json.net metadata-extractor


【解决方案1】:

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

这里也存在部分问题——这完全取决于您为什么要序列化数据。如果您需要完全保真,这比您只想保存/恢复一些属性描述要多得多。

您可以使用以下方式将描述写成 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>
    ...

【讨论】:

  • 谢谢。我将上传的图像保存到数据库并首先解析它们的元数据。我的原因是我不确定我的模型随着时间的推移需要哪些属性,所以我想要一种简单的方法来重新获取元数据而无需重新获取整个图像。
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 2013-04-19
  • 2018-12-05
  • 2013-01-08
  • 2015-03-17
相关资源
最近更新 更多