88using YamlDotNet . Serialization ;
99using YamlDotNet . Serialization . EventEmitters ;
1010using YamlDotNet . Core . Events ;
11+ using YamlDotNet . Serialization . NamingConventions ;
1112using YamlDotNet . Serialization . ObjectGraphVisitors ;
1213
1314public sealed class NullValueGraphVisitor : ChainedObjectGraphVisitor
@@ -52,9 +53,11 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize
5253public class IDictionaryTypeConverter : IYamlTypeConverter {
5354
5455 private bool omitNullValues ;
56+ private bool useFlowStyle ;
5557
56- public IDictionaryTypeConverter ( bool omitNullValues = false ) {
58+ public IDictionaryTypeConverter ( bool omitNullValues = false , bool useFlowStyle = false ) {
5759 this . omitNullValues = omitNullValues ;
60+ this . useFlowStyle = useFlowStyle ;
5861 }
5962
6063 public bool Accepts ( Type type ) {
@@ -68,7 +71,9 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria
6871
6972 public void WriteYaml ( IEmitter emitter , object value , Type type , ObjectSerializer serializer ) {
7073 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 ) ) ;
7277 foreach ( DictionaryEntry entry in hObj ) {
7378 if ( entry . Value == null ) {
7479 if ( this . omitNullValues == true ) {
@@ -92,9 +97,11 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize
9297public class PSObjectTypeConverter : IYamlTypeConverter {
9398
9499 private bool omitNullValues ;
100+ private bool useFlowStyle ;
95101
96- public PSObjectTypeConverter ( bool omitNullValues = false ) {
102+ public PSObjectTypeConverter ( bool omitNullValues = false , bool useFlowStyle = false ) {
97103 this . omitNullValues = omitNullValues ;
104+ this . useFlowStyle = useFlowStyle ;
98105 }
99106
100107 public bool Accepts ( Type type ) {
@@ -110,7 +117,8 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria
110117
111118 public void WriteYaml ( IEmitter emitter , object value , Type type , ObjectSerializer serializer ) {
112119 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 ) ) ;
114122 foreach ( var prop in psObj . Properties ) {
115123 if ( prop . Value == null ) {
116124 if ( this . omitNullValues == true ) {
@@ -196,12 +204,19 @@ public static SerializerBuilder BuildSerializer(
196204 SerializerBuilder builder ,
197205 bool omitNullValues = false ,
198206 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+
200215 builder = builder
201216 . WithEventEmitter ( next => new StringQuotingEmitter ( next ) )
202217 . 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 ) ) ;
205220 if ( omitNullValues == true ) {
206221 builder = builder
207222 . WithEmissionPhaseObjectGraphVisitor ( args => new NullValueGraphVisitor ( args . InnerVisitor ) ) ;
0 commit comments