0

dynamic私はメンバーと一緒にクラスを持っています。値がブール値の場合、true / falseシリアル化され、文字列に逆シリアル化されます。これは YamlDotNet の問題ですtrue"true"?

これは私がシリアライズしようとしているクラスです

public class Field : IField
{
    public string MachineName { get; set; }
    public string DisplayName { get; set; }
    public FieldFormatterEnum FormatterType { get; set; }
    public dynamic Value { get; set; }
    public dynamic DefaultValue { get; set; }
    public dynamic FormattedValue { get; set; }
    ...
}

型指定されたデシリアライザー メソッド:

    public T DeserializeObject<T>(string input)
    {
        T o;
        using (var tr = new StringReader(input))
        {
            o = new Deserializer().Deserialize<T>(tr);
        }
        return o;
    }

フィールドは、Listシリアル化/逆シリアル化されている別のクラスにあります。


更新: シリアル化された出力を確認した後、YamlDotNet はシリアル化されたブール値を astrueおよび notとして出力します"true"。だから.. YamlDotNetの逆シリアル化コードに問題があると思いますか?

4

2 に答える 2

0

次のような簡単なテストを設定しました。

class Foo
{
    public dynamic V { get; set; }
}

var f1 = new Foo(){V = 5};    
var tw2 = new StringWriter();
new Serializer().Serialize(tw2, f1);
var tr2 = new StringReader(tw2.ToString());
var f_1 = new Deserializer().Deserialize<Foo>(tr2);

...Vとしてデシリアライズされ"5"ます。逆シリアル化するデフォルトの型はstring

于 2015-04-09T15:05:31.690 に答える
0

boolシリアル化のために、必要な値を持つゲッターのみのプロパティを として作成できます。

public bool ValueAsBool
{
    get
    {
        bool outValue = false;
        if(Value is string)
        {
            bool.TryParse((string)Value, out outValue);
            return outValue;
        }
        return outValue;
    }
}

最終的に、dynamics を使用する場合、いくつかの型情報を破棄することになり、そのすべてを適切に回復できると期待するべきではありません。

于 2015-04-09T14:41:26.830 に答える