首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分YamlDotNet中的真和布尔真

如何区分YamlDotNet中的真和布尔真
EN

Stack Overflow用户
提问于 2015-04-09 14:33:40
回答 2查看 768关注 0票数 0

我有一个有dynamic成员的类。当该值是布尔值时,它被序列化为true / false,它将反序列化为字符串。这是YamlDotNet的问题吗?如果不是,我如何强迫它序列化为true而不是"true"

这是一个我正在尝试序列化的类

代码语言:javascript
复制
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; }
    ...
}

类型化反序列化方法:

代码语言:javascript
复制
    public T DeserializeObject<T>(string input)
    {
        T o;
        using (var tr = new StringReader(input))
        {
            o = new Deserializer().Deserialize<T>(tr);
        }
        return o;
    }

字段位于正在序列化/反序列化的另一个类中的List中。

更新:在查看序列化输出之后,YamlDotNet将序列化的布尔值输出为true,而不是"true"。所以..。我猜这是YamlDotNet中反序列化代码的问题吧?

EN

回答 2

Stack Overflow用户

发布于 2015-04-09 14:41:26

对于序列化,您可以将一个getter专用属性创建为具有所需值的bool

代码语言:javascript
复制
public bool ValueAsBool
{
    get
    {
        bool outValue = false;
        if(Value is string)
        {
            bool.TryParse((string)Value, out outValue);
            return outValue;
        }
        return outValue;
    }
}

最终,当使用dynamic时,您将丢弃一些类型信息,您不应该期望能够正确地恢复所有这些信息。

票数 0
EN

Stack Overflow用户

发布于 2015-04-09 15:05:31

我刚做了一个简单的测试,比如:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29541436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档