2017-01-13 37 views
0

我正在序列化来自上传图像的元数据,以便能够将其保存在数据库中。序列化和反序列化元数据提取器dotnet

这是可能的序列化使用个人JsonConverter从Newtonsoft(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. 

由于名单目录可能会有所不同,具体取决于具体的对象,我怀疑这是微不足道的单独序列化/反序列化目录。

有关如何仅将上传图像的元数据部分保存为可以稍后重新使用的表单的简单建议?

+0

请问你的元数据是什么样子?你可以发布吗? – Mahdi

回答

0

元数据提取器不支持序列化,尽管目前正在讨论此问题的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> 
    ... 
+0

谢谢。我坚持将上传的图像保存到数据库并首先解析其元数据。我的原因是,我不确定随着时间的推移我的模型需要哪些属性,所以我想要一种简单的方法来重新获取元数据而无需重新获取整个图像。 – kbjorn