2016-06-05 8 views
0

Hier ist meine einfache Klasse, wo DigitalStorage eine binäre serializable Klasse ist. Sein Quellcode ist hier zu finden:Wie kann ich in YamlDotNet einen benutzerdefinierten Typ für die Serialisierung angeben?

https://github.com/QualiSystems/Toscana/blob/master/Toscana/Domain/DigitalStorage.cs

public class Host 
{ 
    public HostProperties Properties { get; set; } 
} 

public class HostProperties 
{ 

    [YamlAlias("mem_size")] 
    public DigitalStorage MemSize { get; set; } 
} 

Wenn ich versuche, die folgende YAML deserialisieren, es scheitert:

host: 
    properties: 
     mem_size: 4096 MB 

Hier ist die Ausnahme:

YamlDotNet.Core.YamlException : (Line: 16, Col: 22, Idx: 396) - (Line: 16, Col: 29, Idx: 403): Exception during deserialization 
----> System.InvalidCastException : Invalid cast from 'System.String' to 'Toscana.Domain.DigitalStorage'. 
at YamlDotNet.Serialization.ValueDeserializers.NodeValueDeserializer.DeserializeValue(EventReader reader, Type expectedType, SerializerState state, IValueDeserializer nestedObjectDeserializer) in C:\projects\yamldotnet\YamlDotNet\Serialization\ValueDeserializers\NodeValueDeserializer.cs:line 75 

Antwort

1

Wenn Sie nur eine implicit operator zu Ihrem DigitalStorage cl hinzufügen ass, wird es aus einem string gut konvertieren:

public class DigitalStorage 
{ 
    public DigitalStorage(string value) 
    { 
     // TODO: Do whatever you need to convert the string value. 
    } 

    public static implicit operator DigitalStorage(string value) 
    { 
     return new DigitalStorage(value); 
    } 
}