2015-01-21 6 views
0

Пытается использовать сериализатор YAMLDOTNET, имея некоторые проблемы, когда у меня есть и объект, который состоит не из простых строк, но также имеет специальный объект внутри.Использование объектов внутри объектов

При сериализации я просто получу строку {}. Если, например, в примере Serializing an object graph мы определяем структуру Address. Затем мы создаем новый объект класса 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

+0

Это немного сложно, когда я использую одну и ту же структуру для загрузки того, что находится в поле YAML, в приложение реального времени, которое нуждается в этих упорядоченных структурах. Вы знаете, почему YamlDotNet не сериализует также поля? – OscarSanhueza

+0

Я не уверен, почему он не сериализует поля. Метод 'GetProperties()' в [ЯмлАтрибутТипИнспектор] (https://github.com/aaubry/YamlDotNet/blob/master/YamlDotNet/Serialization/YamlAttributesTypeInspector.cs) имеет логику, которая определяет, какие свойства становятся сериализованы. – matthewrwilton