mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Forth
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Forth
		
	
	
	
	
	
| namespace Nessos.FsPickler.Json
 | |
| 
 | |
|     open System
 | |
|     open System.IO
 | |
|     open System.Text
 | |
| 
 | |
|     open Newtonsoft.Json
 | |
| 
 | |
|     open Nessos.FsPickler
 | |
| 
 | |
|     /// <summary>
 | |
|     ///     Factory methods for the Json serialization format.
 | |
|     /// </summary>
 | |
|     type JsonPickleFormatProvider internal (indent, omitHeader) as self =
 | |
| 
 | |
|         let isCustomSeq isTopLevelSequence = 
 | |
|             isTopLevelSequence && self.OmitHeader && self.UseCustomTopLevelSequenceSeparator
 | |
| 
 | |
|         let mutable sequenceSeparator = " "
 | |
| 
 | |
|         member val Indent = indent with get,set
 | |
|         member val OmitHeader = omitHeader with get,set
 | |
|         member val UseCustomTopLevelSequenceSeparator = false with get,set
 | |
| 
 | |
|         member __.SequenceSeparator
 | |
|             with get () = sequenceSeparator
 | |
|             and set sep =
 | |
|                 if sep <> null && String.IsNullOrWhiteSpace sep then
 | |
|                     sequenceSeparator <- sep
 | |
|                 else
 | |
|                     invalidArg "SequenceSeparator" "should be non-null whitespace."
 | |
| 
 | |
|         interface ITextPickleFormatProvider with
 | |
|             member __.Name = "Json"
 | |
| 
 | |
|             // see discussion : https://github.com/nessos/FsPickler/issues/17
 | |
|             member __.DefaultEncoding = new UTF8Encoding(false) :> Encoding
 | |
| 
 | |
|             member __.CreateWriter (stream, encoding, isTopLevelSequence, leaveOpen) =
 | |
| #if NET40
 | |
|                 if leaveOpen then raise <| new NotSupportedException("'leaveOpen' not supported in .NET 40.")
 | |
|                 let sw = new StreamWriter(stream, encoding)
 | |
| #else
 | |
|                 let sw = new StreamWriter(stream, encoding, 1024, leaveOpen)
 | |
| #endif
 | |
|                 let jw = new JsonTextWriter(sw)
 | |
|                 new JsonPickleWriter(jw, __.OmitHeader, __.Indent, isCustomSeq isTopLevelSequence, sequenceSeparator, leaveOpen) :> _
 | |
| 
 | |
|             member __.CreateReader (stream, encoding, isTopLevelSequence, leaveOpen) =
 | |
| #if NET40
 | |
|                 if leaveOpen then raise <| new NotSupportedException("'leaveOpen' not supported in .NET 40.")
 | |
|                 let sr = new StreamReader(stream, encoding)
 | |
| #else
 | |
|                 let sr = new StreamReader(stream, encoding, true, 1024, leaveOpen)
 | |
| #endif
 | |
|                 let jr = new JsonTextReader(sr)
 | |
|                 new JsonPickleReader(jr, __.OmitHeader, isCustomSeq isTopLevelSequence, leaveOpen) :> _
 | |
| 
 | |
|             member __.CreateWriter (textWriter, isTopLevelSequence, leaveOpen) =
 | |
|                 let jw = new JsonTextWriter(textWriter)
 | |
|                 new JsonPickleWriter(jw, __.OmitHeader, __.Indent, isCustomSeq isTopLevelSequence, sequenceSeparator, leaveOpen) :> _
 | |
| 
 | |
|             member __.CreateReader (textReader, isTopLevelSequence, leaveOpen) =
 | |
|                 let jr = new JsonTextReader(textReader)
 | |
|                 new JsonPickleReader(jr, __.OmitHeader, isCustomSeq isTopLevelSequence, leaveOpen) :> _ |