8
8
using YamlDotNet . Serialization ;
9
9
using YamlDotNet . Serialization . EventEmitters ;
10
10
using YamlDotNet . Core . Events ;
11
+ using YamlDotNet . Serialization . NamingConventions ;
11
12
using YamlDotNet . Serialization . ObjectGraphVisitors ;
12
13
13
14
public sealed class NullValueGraphVisitor : ChainedObjectGraphVisitor
@@ -52,9 +53,11 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize
52
53
public class IDictionaryTypeConverter : IYamlTypeConverter {
53
54
54
55
private bool omitNullValues ;
56
+ private bool useFlowStyle ;
55
57
56
- public IDictionaryTypeConverter ( bool omitNullValues = false ) {
58
+ public IDictionaryTypeConverter ( bool omitNullValues = false , bool useFlowStyle = false ) {
57
59
this . omitNullValues = omitNullValues ;
60
+ this . useFlowStyle = useFlowStyle ;
58
61
}
59
62
60
63
public bool Accepts ( Type type ) {
@@ -68,7 +71,9 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria
68
71
69
72
public void WriteYaml ( IEmitter emitter , object value , Type type , ObjectSerializer serializer ) {
70
73
var hObj = ( IDictionary ) value ;
71
- emitter . Emit ( new MappingStart ( ) ) ;
74
+ var mappingStyle = this . useFlowStyle ? MappingStyle . Flow : MappingStyle . Block ;
75
+
76
+ emitter . Emit ( new MappingStart ( AnchorName . Empty , TagName . Empty , true , mappingStyle ) ) ;
72
77
foreach ( DictionaryEntry entry in hObj ) {
73
78
if ( entry . Value == null ) {
74
79
if ( this . omitNullValues == true ) {
@@ -92,9 +97,11 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize
92
97
public class PSObjectTypeConverter : IYamlTypeConverter {
93
98
94
99
private bool omitNullValues ;
100
+ private bool useFlowStyle ;
95
101
96
- public PSObjectTypeConverter ( bool omitNullValues = false ) {
102
+ public PSObjectTypeConverter ( bool omitNullValues = false , bool useFlowStyle = false ) {
97
103
this . omitNullValues = omitNullValues ;
104
+ this . useFlowStyle = useFlowStyle ;
98
105
}
99
106
100
107
public bool Accepts ( Type type ) {
@@ -110,7 +117,8 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria
110
117
111
118
public void WriteYaml ( IEmitter emitter , object value , Type type , ObjectSerializer serializer ) {
112
119
var psObj = ( PSObject ) value ;
113
- emitter . Emit ( new MappingStart ( ) ) ;
120
+ var mappingStyle = this . useFlowStyle ? MappingStyle . Flow : MappingStyle . Block ;
121
+ emitter . Emit ( new MappingStart ( AnchorName . Empty , TagName . Empty , true , mappingStyle ) ) ;
114
122
foreach ( var prop in psObj . Properties ) {
115
123
if ( prop . Value == null ) {
116
124
if ( this . omitNullValues == true ) {
@@ -196,12 +204,19 @@ public static SerializerBuilder BuildSerializer(
196
204
SerializerBuilder builder ,
197
205
bool omitNullValues = false ,
198
206
bool useFlowStyle = false ,
199
- bool useSequenceFlowStyle = false ) {
207
+ bool useSequenceFlowStyle = false ,
208
+ bool jsonCompatible = false ) {
209
+
210
+ if ( jsonCompatible == true ) {
211
+ useFlowStyle = true ;
212
+ useSequenceFlowStyle = true ;
213
+ }
214
+
200
215
builder = builder
201
216
. WithEventEmitter ( next => new StringQuotingEmitter ( next ) )
202
217
. WithTypeConverter ( new BigIntegerTypeConverter ( ) )
203
- . WithTypeConverter ( new IDictionaryTypeConverter ( omitNullValues ) )
204
- . WithTypeConverter ( new PSObjectTypeConverter ( omitNullValues ) ) ;
218
+ . WithTypeConverter ( new IDictionaryTypeConverter ( omitNullValues , useFlowStyle ) )
219
+ . WithTypeConverter ( new PSObjectTypeConverter ( omitNullValues , useFlowStyle ) ) ;
205
220
if ( omitNullValues == true ) {
206
221
builder = builder
207
222
. WithEmissionPhaseObjectGraphVisitor ( args => new NullValueGraphVisitor ( args . InnerVisitor ) ) ;
0 commit comments