我有一个有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将序列化的布尔值输出为true,而不是"true"。所以..。我猜这是YamlDotNet中反序列化代码的问题吧?
发布于 2015-04-09 14:41:26
对于序列化,您可以将一个getter专用属性创建为具有所需值的bool:
public bool ValueAsBool
{
get
{
bool outValue = false;
if(Value is string)
{
bool.TryParse((string)Value, out outValue);
return outValue;
}
return outValue;
}
}最终,当使用dynamic时,您将丢弃一些类型信息,您不应该期望能够正确地恢复所有这些信息。
发布于 2015-04-09 15:05:31
我刚做了一个简单的测试,比如:
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。
https://stackoverflow.com/questions/29541436
复制相似问题