2016-11-20 2 views
3

Ich bin ein bisschen mit yaml spielen und YamlDotNetFehler Deserialisieren yaml mit yamldotnet

Aber ich habe ein Problem, einige Deserialisieren es scheint sehr einfach zu tun.

Das ist mein yaml Datei:

--- 
# Folders to secure (with recursive content) 
folders2Secure: 
- .git 
- .vs 

folders2Delete: 
- packages 
- obj 
- bin 
- TestResults 
- node_modules 
... 

Related C# Objekt:

public class FolderPreferences 
{ 
    public List<string> Folders2Secure { get; set; } 
    public List<string> Folders2Delete { get; set; } 
} 

Mit diesem Code es deserialisiert zu erhalten: Um diesen Fehler/Stapel

public class ConfigurationReader 
{ 
    public FolderPreferences Read(string configurationFile) 
    { 
     var input = new StringReader(configurationFile); 
     var deserializerBuilder = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); 

     var deserializer = deserializerBuilder.Build(); 

     var result = deserializer.Deserialize<FolderPreferences>(input); 
     return result; 
    } 
} 

Und ich habe Rennen:

YamlDotNet.Core.YamlException was unhandled 
    HResult=-2146233088 
    Message=(Line: 1, Col: 1, Idx: 0) - (Line: 1, Col: 19, Idx: 18): Exception during deserialization 
    Source=YamlDotNet 
    StackTrace: 
     at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer) in C:\projects\yamldotnet\YamlDotNet\Serialization\ValueDeserializers\NodeValueDeserializer.cs:line 75 
     at YamlDotNet.Serialization.ValueDeserializers.AliasValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer) in C:\projects\yamldotnet\YamlDotNet\Serialization\ValueDeserializers\AliasValueDeserializer.cs:line 134 
     at YamlDotNet.Serialization.Deserializer.Deserialize(IParser parser, Type type) in C:\projects\yamldotnet\YamlDotNet\Serialization\Deserializer.cs:line 315 
     at YamlDotNet.Serialization.Deserializer.Deserialize[T](TextReader input) in C:\projects\yamldotnet\YamlDotNet\Serialization\Deserializer.cs:line 257 
     at Ebys.CleanFolders.Library.ConfigurationReader.Read[T](String configurationFile) in E:\WorkingGit\bitbucket\CleanFolders\Ebys.CleanFolders.Library\ConfigurationReader.cs:line 21 
     at Ebys.CleanFolders.ConsoleUi.Program.Main(String[] args) in E:\WorkingGit\bitbucket\CleanFolders\Ebys.CleanFolders\Program.cs:line 27 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 
     HResult=-2147467262 
     Message=Invalid cast from 'System.String' to 'Ebys.CleanFolders.Library.FolderPreferences'. 
     Source=mscorlib 
     StackTrace: 
      at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) 
      at System.String.System.IConvertible.ToType(Type type, IFormatProvider provider) 
      at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) 
      at YamlDotNet.Serialization.Utilities.TypeConverter.ChangeType(Object value, Type destinationType, CultureInfo culture) in C:\projects\yamldotnet\YamlDotNet\Serialization\Utilities\TypeConverter.cs:line 128 
      at YamlDotNet.Serialization.NodeDeserializers.ScalarNodeDeserializer.YamlDotNet.Serialization.INodeDeserializer.Deserialize(IParser parser, Type expectedType, Func`3 nestedObjectDeserializer, Object& value) in C:\projects\yamldotnet\YamlDotNet\Serialization\NodeDeserializers\ScalarNodeDeserializer.cs:line 96 
      at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(IParser parser, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer) in C:\projects\yamldotnet\YamlDotNet\Serialization\ValueDeserializers\NodeValueDeserializer.cs:line 60 
     InnerException: 

Irgendeine Idee, was ich falsch mache?

Edited

Die Datei in Hexa Blick ins Innere GVim.

enter image description here

Antwort

0

Das Problem besteht darin, dass Sie ein StringReader erstellen, das ein Leser für die Zeichenfolge ist, die Sie angeben, kein Leser für eine Datei. Sie benötigen File.OpenText oder eine ähnliche API zu verwenden, aus der Datei zu lesen:

public FolderPreferences Read(string configurationFile) 
{ 
    using (var input = File.OpenText(configurationFile)) 
    { 
     var deserializerBuilder = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()); 

     var deserializer = deserializerBuilder.Build(); 

     var result = deserializer.Deserialize<FolderPreferences>(input); 
     return result; 
    } 
} 
+0

Danke, das war das Problem. Vielen Dank. :-) – ferpega

0

Ich würde vermuten, dass es sich um zusätzliche Inhalte zu Beginn der Datei, die als erstes Dokument interpretiert wird eine einzelne Zeichenfolge enthält, damit die Ausnahme. Überprüfen Sie die folgende Geige, die Ihren Code verwendet und funktionieren wie erwartet:

https://dotnetfiddle.net/tilGHT

Dann mit diesem vergleichen, wo zusätzlichem Text vor dem Anfang des Dokuments hinzugefügt wurde:

https://dotnetfiddle.net/d72Jut

Sie können versuchen, die ursprüngliche --- zu entfernen, wie es sowieso optional ist.

+0

ich bearbeitet habe die Frage ein Hexa-Bild der YAML-Datei hinzuzufügen. Obwohl es am Anfang ein paar Charaktere zu haben scheint, habe ich versucht, diese Charaktere ohne Glück zu bereinigen. – ferpega

+0

Können Sie die Datei irgendwo hochladen und einen Link bereitstellen? –

+0

Ich habe die Datei hier: https://expirebox.com/download/4479aa8830f4426f9582670e5d3b12cc.html – ferpega

Verwandte Themen