@@ -147,28 +147,62 @@ public override void WriteTo(XmlWriter w)
147147 if ( xmlWriterField != null )
148148 {
149149 var xmlwriter = xmlWriterField . GetValue ( w ) ;
150+
150151 var rawTextWPrp = xmlwriter . GetType ( )
151152 . GetProperty ( "InnerWriter" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
152- var rawTextW = rawTextWPrp . GetValue ( xmlwriter , null ) ;
153- var bufCharsField = rawTextW . GetType ( )
154- . GetField ( "bufChars" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
155- var contentPosField = rawTextW . GetType ( )
156- . GetField ( "contentPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
157- var buffPosField = rawTextW . GetType ( )
158- . GetField ( "bufPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
159- var ioTextWriterField = rawTextW . GetType ( )
160- . GetField ( "writer" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
161- var ioTextWriter = ioTextWriterField . GetValue ( rawTextW ) ;
162- var sbField = ioTextWriter . GetType ( )
163- . GetField ( "_sb" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
164- positionXmlDocument . writerSb = sbField . GetValue ( ioTextWriter ) as StringBuilder ;
165-
166- positionXmlDocument . bufGetter =
167- Expression . Lambda < Func < char [ ] > > ( Expression . Field ( Expression . Constant ( rawTextW ) , bufCharsField ) ) . Compile ( ) ;
168- positionXmlDocument . contentPosFieldGetter =
169- Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , contentPosField ) ) . Compile ( ) ;
170- positionXmlDocument . buffPosGetter =
171- Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , buffPosField ) ) . Compile ( ) ;
153+ if ( rawTextWPrp != null )
154+ {
155+ var rawTextW = rawTextWPrp . GetValue ( xmlwriter , null ) ;
156+ var bufCharsField = rawTextW . GetType ( )
157+ . GetField ( "bufChars" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
158+ var contentPosField = rawTextW . GetType ( )
159+ . GetField ( "contentPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
160+ var buffPosField = rawTextW . GetType ( )
161+ . GetField ( "bufPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
162+ var ioTextWriterField = rawTextW . GetType ( )
163+ . GetField ( "writer" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
164+ var ioTextWriter = ioTextWriterField . GetValue ( rawTextW ) ;
165+ var sbField = ioTextWriter . GetType ( )
166+ . GetField ( "_sb" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
167+ positionXmlDocument . writerSb = sbField . GetValue ( ioTextWriter ) as StringBuilder ;
168+
169+ positionXmlDocument . bufGetter =
170+ Expression . Lambda < Func < char [ ] > > ( Expression . Field ( Expression . Constant ( rawTextW ) , bufCharsField ) ) . Compile ( ) ;
171+ positionXmlDocument . contentPosFieldGetter =
172+ Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , contentPosField ) ) . Compile ( ) ;
173+ positionXmlDocument . buffPosGetter =
174+ Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , buffPosField ) ) . Compile ( ) ;
175+ }
176+ else
177+ {
178+
179+ rawTextWPrp = xmlwriter . GetType ( )
180+ . GetProperty ( "RawWriter" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
181+ if ( rawTextWPrp != null )
182+ {
183+ var rawTextW = rawTextWPrp . GetValue ( xmlwriter , null ) ;
184+ var bufCharsField = rawTextW . GetType ( )
185+ . GetField ( "_bufChars" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
186+ var contentPosField = rawTextW . GetType ( )
187+ . GetField ( "_contentPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
188+ var buffPosField = rawTextW . GetType ( )
189+ . GetField ( "_bufPos" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
190+ var ioTextWriterField = rawTextW . GetType ( )
191+ . GetField ( "_writer" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
192+ var ioTextWriter = ioTextWriterField . GetValue ( rawTextW ) ;
193+ var sbField = ioTextWriter . GetType ( )
194+ . GetField ( "_sb" , BindingFlags . Instance | BindingFlags . NonPublic | BindingFlags . Public ) ;
195+ positionXmlDocument . writerSb = sbField . GetValue ( ioTextWriter ) as StringBuilder ;
196+
197+ positionXmlDocument . bufGetter =
198+ Expression . Lambda < Func < char [ ] > > ( Expression . Field ( Expression . Constant ( rawTextW ) , bufCharsField ) ) . Compile ( ) ;
199+ positionXmlDocument . contentPosFieldGetter =
200+ Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , contentPosField ) ) . Compile ( ) ;
201+ positionXmlDocument . buffPosGetter =
202+ Expression . Lambda < Func < int > > ( Expression . Field ( Expression . Constant ( rawTextW ) , buffPosField ) ) . Compile ( ) ;
203+ }
204+ }
205+
172206 }
173207 }
174208 catch ( Exception )
0 commit comments