2015-01-21 69 views
0

尝试使用YAMLDOTNET的序列化程序,当我拥有一些问题时,会出现一些问题,而且对象不仅包含字符串,而且还包含特殊对象。在对象中使用对象

序列化时我只会得到{}字符串。如果例如在Serializing an object graph样本上,我们定义一个结构地址。然后我们在里面创建一个类Address的新对象,这个对象最终被分配到收据中,结果也会在yaml文件的地址字段中显示出来。

示例代码也可以看到here。这将创建一个输出,看起来像:

receipt: Oz-Ware Purchase Invoice 
date: 2007-08-06T00:00:00.0000000 
customer: 
    given: Dorothy 
    family: Gale 
items: 
- part_no: A4786 
    descrip: Water Bucket (Filled) 
    price: 1.47 
    quantity: 4 
- part_no: E1628 
    descrip: High Heeled "Ruby" Slippers 
    price: 100.27 
    quantity: 1 
bill_to: &o0 {} 
ship_to: *o0 

所以bill_to将显示为{}

回答

1

YamlDotNet.Serialization.Serializer不连载领域到YAML输出。它在这个例子中起作用,因为那是使用动态对象,街道,城市和州是该对象的属性。

如果您将地址中的字段更改为属性,则会将其序列化

public struct Address 
{ 
    public string street { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
} 

使用属性而不是公共字段也是最佳实践。

+0

这种解决问题的方法是,接下来是我在字段上使用属性MarshalAs,并且此属性不能与属性一起使用。 – OscarSanhueza 2015-01-30 13:11:13

+0

当我使用相同的结构将YAML字段中的内容下载到需要此编组结构的实时应用程序时,会有点复杂。你知道为什么YamlDotNet不会序列化字段的任何原因吗? – OscarSanhueza 2015-01-30 13:59:17

+0

我不确定它为什么不将字段序列化。 [YamlAttributesTypeInspector](https://github.com/aaubry/YamlDotNet/blob/master/YamlDotNet/Serialization/YamlAttributesTypeInspector.cs)中的GetProperties()方法具有确定哪些属性被序列化的逻辑。 – matthewrwilton 2015-01-31 20:37:30