Hello all, I have an XML file like this: <?xml version="1.0" encoding="utf-8"?> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" xmlns:someobj= http://www.abcinc.com/objectdefinition> ...... </SomeObject> And I want to deserialize it, so I created a class: [XmlRoot(Namespace="someobj", ElementName="SomeObject")] class SomeObject { .... } When calling the 'Deserialize' method of a serializer I get an error "There's an error in the XML document (2,2)". If I don't use namespaces (which I cannot aford, since I get the file from a vendor), everything works fine: <?xml version="1.0" encoding="utf-8"?> <SomeObject> ...... </SomeObject> Deserialize without issues into: [XmlRoot] class SomeObject { .... } Could somebody let me know what am I doing wrong? I even tried to add the namespace in the class' constructor, with the same result, like this: [XmlRoot(Namespace="someobj", ElementName="SomeObject")] class SomeObject { [XmlNamespaceDeclarations] public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); public SomeObject() { xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); xmlns.Add( "someobj", @ http://www.abcinc.com/objectdefinition ); } } Thanks a lot! Mike
Mike, to solve these sorts of problems, you can try working in the opposite direction. When I want to de-serialize a document of a particular schema, here's what I do: 1. infer the schema from the document using xsd.exe (only necessary if no schema is available. Really, the doc publisher should give you a schema, you shouldn't have to infer it) 2. generate classes from that schema, using xsd.exe /c 3. build a test driver (20 lines of code) that instantiates the class and then serializes it. Compare to the xml document you are trying to match. You can then iterate on your schema or the generated class, tweaking it to match what you want. ----- In your case, A. the xmlns:someobj= http://www.abcinc.com/objectdefinition is not valid XML. Need quotes around this namespace value. B. you did not specify the rest of the XML doc, but the assignment of the someobj prefix corresponding to the http://www.abcinc.com/objectdefinition namespace seems to be unnecessary. This will not break your de-serialization, but it is superfluous. C. the class I got by following the steps above was this: [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc.com/objectdefinition")] [System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc.com/objectdefinition", IsNullable=false)] public class SomeObject { public string SomeField; } And it de-serialized your XML (with the necessary quotes added, and one element added for illustration) just fine. D. to produce a similar XML doc by serializing, use XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this will be the default (no prefix) namespace in the XML doc, eg, xmlns="..." before serializing, and be sure to specify this ns in the Serialize() step. s1.Serialize(xmlWriter, so, ns); -Dino [quoted text, click to view] "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... > Hello all, > > I have an XML file like this: > > <?xml version="1.0" encoding="utf-8"?> > <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" > xmlns:someobj= http://www.abcinc.com/objectdefinition> > ..... > </SomeObject> > > And I want to deserialize it, so I created a class: > > [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > class SomeObject > { > .... > } > > When calling the 'Deserialize' method of a serializer I get an error > "There's an error in the XML document (2,2)". > > If I don't use namespaces (which I cannot aford, since I get the file from > a > vendor), everything works fine: > > <?xml version="1.0" encoding="utf-8"?> > <SomeObject> > ..... > </SomeObject> > > Deserialize without issues into: > > [XmlRoot] > class SomeObject > { > .... > } > > Could somebody let me know what am I doing wrong? I even tried to add the > namespace in the class' constructor, with the same result, like this: > > [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > class SomeObject > { > [XmlNamespaceDeclarations] > public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); > public SomeObject() > { > xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); > xmlns.Add( "someobj", @ http://www.abcinc.com/objectdefinition ); > } > } > > Thanks a lot! > > Mike > > begin 666 miketest.cs M=7-I;F<@4WES=&5M+DE/.PT*=7-I;F<@4WES=&5M+EAM;"Y397)I86QI>F%T M:6]N.PT*#0IN86UE<W!A8V4@26]N:6,@>PT*#0H@('!U8FQI8R!C;&%S<R!8 M;6Q497AT5W)I=&5R1F]R;6%T=&5D3F]$96-L87)A=&EO;B Z(%-Y<W1E;2Y8 M;6PN6&UL5&5X=%=R:71E<B![#0H@(" @<'5B;&EC(%AM;%1E>'17<FET97)& M;W)M871T961.;T1E8VQA<F%T:6]N("A3>7-T96TN24\N5&5X=%=R:71E<B!W M*2 Z(&)A<V4H=RD@>R!&;W)M871T:6YG/2!3>7-T96TN6&UL+D9O<FUA='1I M;F<N26YD96YT960[?0T*(" @('!U8FQI8R!O=F5R<FED92!V;VED(%=R:71E M4W1A<G1$;V-U;65N=" H*2![('T-"B @?0T*#0H-"@T*("!P=6)L:6,@8VQA M<W,@5&5S=$1R:79E<B![#0H-"B @("!S=&%T:6,@=F]I9"!-86EN*'-T<FEN M9UM=(&%R9W,I('L-"@T*(" @(" @=')Y('L-"@T*"5-Y<W1E;2Y)3RY3=')I M;F=7<FET97(@<W1R:6YG5W)I=&5R.R -"@E3>7-T96TN6&UL+EAM;%=R:71E M<B!X;6Q7<FET97([( T*#0H)+R\@<V5T=7 -"@E8;6Q397)I86QI>F5R(',Q M(#T@;F5W(%AM;%-E<FEA;&EZ97(H='EP96]F*%-O;65/8FIE8W0I*3L-"@T* M"2\O('-U<'!R97-S(&1E9F%U;'0@;F%M97-P86-E(&5N=')I97,@:6X@=&AE M(')O;W0@96QT#0H)6&UL4V5R:6%L:7IE<DYA;65S<&%C97,@;G,@/2!N97<@ M6&UL4V5R:6%L:7IE<DYA;65S<&%C97,H*3L-"@EN<RY!9&0H("(B+" B:'1T M<#HO+W=W=RYA8F-I;F,N8V]M+V]B:F5C=&1E9FEN:71I;VXB("D[#0H-"@DO M+R!I;G-T86YT:6%T90T*"5-O;65/8FIE8W0@<V\](&YE=R!3;VUE3V)J96-T M*"D[( T*"7-O+E-O;65&:65L9#T@(E1H:7,@:7,@82!T97-T(CL-"@T*#0H) M+R\@<V5R:6%L:7IE.@T*"2\O("AU<V4@82!C=7-T;VT@5&5X=%=R:71E<B!T M;R!S=7!P<F5S<R!T:&4@6$U,(&1E8VQA<F%T:6]N*0T*"7-T<FEN9U=R:71E M<B ](&YE=R!3>7-T96TN24\N4W1R:6YG5W)I=&5R*"D[#0H)>&UL5W)I=&5R M(#T@;F5W(%AM;%1E>'17<FET97)&;W)M871T961.;T1E8VQA<F%T:6]N*'-T M<FEN9U=R:71E<BD[#0H)<S$N4V5R:6%L:7IE*'AM;%=R:71E<BP@<V\L(&YS M*3L-"@T*"5-Y<W1E;2Y#;VYS;VQE+E=R:71E3&EN92AS=')I;F=7<FET97(N M5&]3=')I;F<H*2 K(")<;EQN(BD[#0H-"@E3>7-T96TN0V]N<V]L92Y7<FET M94QI;F4H(EQN/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3U<;B(I.PT*#0H)+R\@=')Y(&1E+7-E<FEA;&EZ90T*"7-T<FEN M9R!P871H/2)M:6ME+GAM;"([#0H)4W1R96%M4F5A9&5R('(@/2!&:6QE+D]P M96Y497AT*'!A=&@I.PT*"5-O;65/8FIE8W0@<V\R(#T@*%-O;65/8FIE8W0I M(',Q+D1E<V5R:6%L:7IE*'(I.PT*"7(N0VQO<V4H*3L-"@T*"2\O(')E+7-E M<FEA;&EZ93H-"@DO+R H=7-E(&$@8W5S=&]M(%1E>'17<FET97(@=&\@<W5P M<')E<W,@=&AE(%A-3"!D96-L87)A=&EO;BD-"@ES=')I;F=7<FET97(@/2!N M97<@4WES=&5M+DE/+E-T<FEN9U=R:71E<B@I.PT*"7AM;%=R:71E<B ](&YE M=R!8;6Q497AT5W)I=&5R1F]R;6%T=&5D3F]$96-L87)A=&EO;BAS=')I;F=7 M<FET97(I.PT*"7,Q+E-E<FEA;&EZ92AX;6Q7<FET97(L('-O,BP@;G,I.PT* M#0H)4WES=&5M+D-O;G-O;&4N5W)I=&5,:6YE*'-T<FEN9U=R:71E<BY4;U-T M<FEN9R@I("L@(EQN7&XB*3L-"@T*#0H@(" @("!]#0H@(" @("!C871C:" H M4WES=&5M+D5X8V5P=&EO;B!E,2D@>PT*"5-Y<W1E;2Y#;VYS;VQE+E=R:71E M3&EN92@B17AC97!T:6]N(5QN(B K(&4Q*3L-"B @(" @('T@(" @(" -"B @ M("!]#0H@('T-"GT-"@T*#0HO+R\@/')E;6%R:W,O/@T*6U-Y<W1E;2Y8;6PN M4V5R:6%L:7IA=&EO;BY8;6Q4>7!E071T<FEB=71E*$YA;65S<&%C93TB:'1T M<#HO+W=W=RYA8F-I;F,N8V]M+V]B:F5C=&1E9FEN:71I;VXB*5T-"EM3>7-T M96TN6&UL+E-E<FEA;&EZ871I;VXN6&UL4F]O=$%T=')I8G5T92A.86UE<W!A M8V4](FAT=' Z+R]W=W<N86)C:6YC+F-O;2]O8FIE8W1D969I;FET:6]N(BP@ M27-.=6QL86)L93UF86QS92E=#0IP=6)L:6,@8VQA<W,@4V]M94]B:F5C="C:6YC+F-O;2]O8FIE M8W1D969I;FET:6]N(B!X;6QN<SIS;VUE;V)J/2)H='1P.B\O=W=W+F%B8VEN M8RYC;VTO;V)J96-T9&5F:6YI=&EO;B(^#0H@(#Q3;VUE1FEE;&0^=F%L=64@ F9V]E<R!H97)E/"]3;VUE1FEE;&0^#0H\+U-O;65/8FIE8W0^#0H` ` end
Mike and Dino, Inferring schemas and classes is definitely a good way to go. Note that there are newer tools on GDN for inferring schemas from classes [0] and creating classes from schemas [1]. These tools should address some of the shortcomings of xsd.exe. HTH, Christoph Schittko MVP XML http://weblogs.asp.net/cschittko [0] http://apps.gotdotnet.com/xmltools/xsdinference/ [1] http://apps.gotdotnet.com/xmltools/xsdobjgen/ [quoted text, click to view] > -----Original Message----- > From: Dino Chiesa [Microsoft] [mailto:dinoch@online.microsoft.com] > Posted At: Thursday, December 23, 2004 10:52 AM > Posted To: microsoft.public.dotnet.xml > Conversation: Deserialization issue > Subject: Re: Deserialization issue > > Mike, > to solve these sorts of problems, you can try working in the opposite > direction. When I want to de-serialize a document of a particular schema, > here's what I do: > > 1. infer the schema from the document using xsd.exe (only necessary if no > schema is available. Really, the doc publisher should give you a schema, > you shouldn't have to infer it) > > 2. generate classes from that schema, using xsd.exe /c > > 3. build a test driver (20 lines of code) that instantiates the class and > then serializes it. Compare to the xml document you are trying to match. > You can then iterate on your schema or the generated class, tweaking it to > match what you want. > > > ----- > > In your case, > > A. the > xmlns:someobj= http://www.abcinc.com/objectdefinition > is not valid XML. Need quotes around this namespace value. > > B. you did not specify the rest of the XML doc, but the assignment of the > someobj prefix corresponding to the http://www.abcinc.com/objectdefinition > namespace seems to be unnecessary. This will not break your > de-serialization, but it is superfluous. > > C. the class I got by following the steps above was this: > > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc. co [quoted text, click to view] > m/objectdefinition")] >
[System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc. co [quoted text, click to view] > m/objectdefinition", > IsNullable=false)] > public class SomeObject { > public string SomeField; > } > > > And it de-serialized your XML (with the necessary quotes added, and one > element added for illustration) just fine. > > D. to produce a similar XML doc by serializing, use > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this will > be > the default (no prefix) namespace in the XML doc, eg, xmlns="..." > > before serializing, and be sure to specify this ns in the Serialize() > step. > > s1.Serialize(xmlWriter, so, ns); > > -Dino > > > > > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... > > Hello all, > > > > I have an XML file like this: > > > > <?xml version="1.0" encoding="utf-8"?> > > <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" > > xmlns:someobj= http://www.abcinc.com/objectdefinition> > > ..... > > </SomeObject> > > > > And I want to deserialize it, so I created a class: > > > > [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > > class SomeObject > > { > > .... > > } > > > > When calling the 'Deserialize' method of a serializer I get an error > > "There's an error in the XML document (2,2)". > > > > If I don't use namespaces (which I cannot aford, since I get the file > from > > a > > vendor), everything works fine: > > > > <?xml version="1.0" encoding="utf-8"?> > > <SomeObject> > > ..... > > </SomeObject> > > > > Deserialize without issues into: > > > > [XmlRoot] > > class SomeObject > > { > > .... > > } > > > > Could somebody let me know what am I doing wrong? I even tried to add > the > > namespace in the class' constructor, with the same result, like this: > > > > [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > > class SomeObject > > { > > [XmlNamespaceDeclarations] > > public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); > > public SomeObject() > > { > > xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); > > xmlns.Add( "someobj", @ http://www.abcinc.com/objectdefinition ); > > } > > } > > > > Thanks a lot! > > > > Mike > > > > >
Can you post what XML files your dealing with? You said that they are generated by a Microsoft tool. Could you say which tool? HTH, Christoph Schittko MVP XML http://weblogs.asp.net/cschittko [quoted text, click to view] > -----Original Message----- > From: Mike Sarbu [mailto:m_sarbu@yahoo.com] > Posted At: Monday, December 27, 2004 9:46 PM > Posted To: microsoft.public.dotnet.xml > Conversation: Deserialization issue > Subject: Re: Deserialization issue > > Hi Dino, > > Thanks a lot for the pointers you gave me, they were great. Unfortunately, > I > still have problems. > > Sorry for the missing quotes in the example that I posted, I typed it > instead of doing a copy-paste. In the real file the quotes were present. > > Now about my issues: > > 1. The publisher (which is Microsoft) didn't publish the schema. > 2. xsd.exe cannot infer the schema from the xml file because of an error > in > the xml document: "The same table (somenamehere) cannot be the child table > in two nested relations". Now the xml file is generated by a Microsoft > tool, > so I would've expected it to be correct ... > 3. Even when I delete the offending elements, I can succesfully generate > the > schema, I then generate the class, which looks identical to the one you've > generated, but I get the same error when deserializing it. > > Thanks a lot for any other piece of advice that may help, > > Mike > > "Dino Chiesa [Microsoft]" <dinoch@online.microsoft.com> wrote in message > news:esdG5%23Q6EHA.2552@TK2MSFTNGP09.phx.gbl... > > Mike, > > to solve these sorts of problems, you can try working in the opposite > > direction. When I want to de-serialize a document of a particular > schema, > > here's what I do: > > > > 1. infer the schema from the document using xsd.exe (only necessary if > no > > schema is available. Really, the doc publisher should give you a > schema, > > you shouldn't have to infer it) > > > > 2. generate classes from that schema, using xsd.exe /c > > > > 3. build a test driver (20 lines of code) that instantiates the class > and > > then serializes it. Compare to the xml document you are trying to > match. > > You can then iterate on your schema or the generated class, tweaking it > to > > match what you want. > > > > > > ----- > > > > In your case, > > > > A. the > > xmlns:someobj= http://www.abcinc.com/objectdefinition > > is not valid XML. Need quotes around this namespace value. > > > > B. you did not specify the rest of the XML doc, but the assignment of > the > > someobj prefix corresponding to the > http://www.abcinc.com/objectdefinition > > namespace seems to be unnecessary. This will not break your > > de-serialization, but it is superfluous. > > > > C. the class I got by following the steps above was this: > > > > > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc. co [quoted text, click to view] > m/objectdefinition")] > > >
[System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc. co [quoted text, click to view] > m/objectdefinition", > > IsNullable=false)] > > public class SomeObject { > > public string SomeField; > > } > > > > > > And it de-serialized your XML (with the necessary quotes added, and one > > element added for illustration) just fine. > > > > D. to produce a similar XML doc by serializing, use > > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); > > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this will > be > > the default (no prefix) namespace in the XML doc, eg, xmlns="..." > > > > before serializing, and be sure to specify this ns in the Serialize() > > step. > > > > s1.Serialize(xmlWriter, so, ns); > > > > -Dino > > > > > > > > > > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message > > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... > >> Hello all, > >> > >> I have an XML file like this: > >> > >> <?xml version="1.0" encoding="utf-8"?> > >> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" > >> xmlns:someobj= http://www.abcinc.com/objectdefinition> > >> ..... > >> </SomeObject> > >> > >> And I want to deserialize it, so I created a class: > >> > >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > >> class SomeObject > >> { > >> .... > >> } > >> > >> When calling the 'Deserialize' method of a serializer I get an error > >> "There's an error in the XML document (2,2)". > >> > >> If I don't use namespaces (which I cannot aford, since I get the file > >> from a > >> vendor), everything works fine: > >> > >> <?xml version="1.0" encoding="utf-8"?> > >> <SomeObject> > >> ..... > >> </SomeObject> > >> > >> Deserialize without issues into: > >> > >> [XmlRoot] > >> class SomeObject > >> { > >> .... > >> } > >> > >> Could somebody let me know what am I doing wrong? I even tried to add > the > >> namespace in the class' constructor, with the same result, like this: > >> > >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > >> class SomeObject > >> { > >> [XmlNamespaceDeclarations] > >> public XmlSerializerNamespaces xmlns = new > XmlSerializerNamespaces(); > >> public SomeObject() > >> { > >> xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); > >> xmlns.Add( "someobj", @ http://www.abcinc.com/objectdefinition ); > >> } > >> } > >> > >> Thanks a lot! > >> > >> Mike > >> > >> > > > > > >
Hi Dino, Thanks a lot for the pointers you gave me, they were great. Unfortunately, I still have problems. Sorry for the missing quotes in the example that I posted, I typed it instead of doing a copy-paste. In the real file the quotes were present. Now about my issues: 1. The publisher (which is Microsoft) didn't publish the schema. 2. xsd.exe cannot infer the schema from the xml file because of an error in the xml document: "The same table (somenamehere) cannot be the child table in two nested relations". Now the xml file is generated by a Microsoft tool, so I would've expected it to be correct ... 3. Even when I delete the offending elements, I can succesfully generate the schema, I then generate the class, which looks identical to the one you've generated, but I get the same error when deserializing it. Thanks a lot for any other piece of advice that may help, Mike [quoted text, click to view] "Dino Chiesa [Microsoft]" <dinoch@online.microsoft.com> wrote in message news:esdG5%23Q6EHA.2552@TK2MSFTNGP09.phx.gbl... > Mike, > to solve these sorts of problems, you can try working in the opposite > direction. When I want to de-serialize a document of a particular schema, > here's what I do: > > 1. infer the schema from the document using xsd.exe (only necessary if no > schema is available. Really, the doc publisher should give you a schema, > you shouldn't have to infer it) > > 2. generate classes from that schema, using xsd.exe /c > > 3. build a test driver (20 lines of code) that instantiates the class and > then serializes it. Compare to the xml document you are trying to match. > You can then iterate on your schema or the generated class, tweaking it to > match what you want. > > > ----- > > In your case, > > A. the > xmlns:someobj= http://www.abcinc.com/objectdefinition > is not valid XML. Need quotes around this namespace value. > > B. you did not specify the rest of the XML doc, but the assignment of the > someobj prefix corresponding to the http://www.abcinc.com/objectdefinition > namespace seems to be unnecessary. This will not break your > de-serialization, but it is superfluous. > > C. the class I got by following the steps above was this: > > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc.com/objectdefinition")] > [System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc.com/objectdefinition", > IsNullable=false)] > public class SomeObject { > public string SomeField; > } > > > And it de-serialized your XML (with the necessary quotes added, and one > element added for illustration) just fine. > > D. to produce a similar XML doc by serializing, use > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this will be > the default (no prefix) namespace in the XML doc, eg, xmlns="..." > > before serializing, and be sure to specify this ns in the Serialize() > step. > > s1.Serialize(xmlWriter, so, ns); > > -Dino > > > > > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... >> Hello all, >> >> I have an XML file like this: >> >> <?xml version="1.0" encoding="utf-8"?> >> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" >> xmlns:someobj= http://www.abcinc.com/objectdefinition> >> ..... >> </SomeObject> >> >> And I want to deserialize it, so I created a class: >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] >> class SomeObject >> { >> .... >> } >> >> When calling the 'Deserialize' method of a serializer I get an error >> "There's an error in the XML document (2,2)". >> >> If I don't use namespaces (which I cannot aford, since I get the file >> from a >> vendor), everything works fine: >> >> <?xml version="1.0" encoding="utf-8"?> >> <SomeObject> >> ..... >> </SomeObject> >> >> Deserialize without issues into: >> >> [XmlRoot] >> class SomeObject >> { >> .... >> } >> >> Could somebody let me know what am I doing wrong? I even tried to add the >> namespace in the class' constructor, with the same result, like this: >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] >> class SomeObject >> { >> [XmlNamespaceDeclarations] >> public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(); >> public SomeObject() >> { >> xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); >> xmlns.Add( "someobj", @ http://www.abcinc.com/objectdefinition ); >> } >> } >> >> Thanks a lot! >> >> Mike >> >> > > >
Well, I'm trying to deserialize an RDL file, generated by Visual Studio. Please find the file attached. Thanks, Mike [quoted text, click to view] "Christoph Schittko [MVP]" <INVALIDEMAIL@austin.rr.com> wrote in message news:uTHrQPJ7EHA.1452@TK2MSFTNGP11.phx.gbl... > Can you post what XML files your dealing with? You said that they are > generated by a Microsoft tool. Could you say which tool? > > HTH, > Christoph Schittko > MVP XML > http://weblogs.asp.net/cschittko > > >> -----Original Message----- >> From: Mike Sarbu [mailto:m_sarbu@yahoo.com] >> Posted At: Monday, December 27, 2004 9:46 PM >> Posted To: microsoft.public.dotnet.xml >> Conversation: Deserialization issue >> Subject: Re: Deserialization issue >> >> Hi Dino, >> >> Thanks a lot for the pointers you gave me, they were great. > Unfortunately, >> I >> still have problems. >> >> Sorry for the missing quotes in the example that I posted, I typed it >> instead of doing a copy-paste. In the real file the quotes were > present. >> >> Now about my issues: >> >> 1. The publisher (which is Microsoft) didn't publish the schema. >> 2. xsd.exe cannot infer the schema from the xml file because of an > error >> in >> the xml document: "The same table (somenamehere) cannot be the child > table >> in two nested relations". Now the xml file is generated by a Microsoft >> tool, >> so I would've expected it to be correct ... >> 3. Even when I delete the offending elements, I can succesfully > generate >> the >> schema, I then generate the class, which looks identical to the one > you've >> generated, but I get the same error when deserializing it. >> >> Thanks a lot for any other piece of advice that may help, >> >> Mike >> >> "Dino Chiesa [Microsoft]" <dinoch@online.microsoft.com> wrote in > message >> news:esdG5%23Q6EHA.2552@TK2MSFTNGP09.phx.gbl... >> > Mike, >> > to solve these sorts of problems, you can try working in the > opposite >> > direction. When I want to de-serialize a document of a particular >> schema, >> > here's what I do: >> > >> > 1. infer the schema from the document using xsd.exe (only necessary > if >> no >> > schema is available. Really, the doc publisher should give you a >> schema, >> > you shouldn't have to infer it) >> > >> > 2. generate classes from that schema, using xsd.exe /c >> > >> > 3. build a test driver (20 lines of code) that instantiates the > class >> and >> > then serializes it. Compare to the xml document you are trying to >> match. >> > You can then iterate on your schema or the generated class, tweaking > it >> to >> > match what you want. >> > >> > >> > ----- >> > >> > In your case, >> > >> > A. the >> > xmlns:someobj= http://www.abcinc.com/objectdefinition >> > is not valid XML. Need quotes around this namespace value. >> > >> > B. you did not specify the rest of the XML doc, but the assignment > of >> the >> > someobj prefix corresponding to the >> http://www.abcinc.com/objectdefinition >> > namespace seems to be unnecessary. This will not break your >> > de-serialization, but it is superfluous. >> > >> > C. the class I got by following the steps above was this: >> > >> > >> > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc. > co >> m/objectdefinition")] >> > >> > [System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc. > co >> m/objectdefinition", >> > IsNullable=false)] >> > public class SomeObject { >> > public string SomeField; >> > } >> > >> > >> > And it de-serialized your XML (with the necessary quotes added, and > one >> > element added for illustration) just fine. >> > >> > D. to produce a similar XML doc by serializing, use >> > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); >> > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this > will >> be >> > the default (no prefix) namespace in the XML doc, eg, xmlns="..." >> > >> > before serializing, and be sure to specify this ns in the > Serialize() >> > step. >> > >> > s1.Serialize(xmlWriter, so, ns); >> > >> > -Dino >> > >> > >> > >> > >> > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message >> > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... >> >> Hello all, >> >> >> >> I have an XML file like this: >> >> >> >> <?xml version="1.0" encoding="utf-8"?> >> >> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" >> >> xmlns:someobj= http://www.abcinc.com/objectdefinition> >> >> ..... >> >> </SomeObject> >> >> >> >> And I want to deserialize it, so I created a class: >> >> >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] >> >> class SomeObject >> >> { >> >> .... >> >> } >> >> >> >> When calling the 'Deserialize' method of a serializer I get an > error >> >> "There's an error in the XML document (2,2)". >> >> >> >> If I don't use namespaces (which I cannot aford, since I get the > file >> >> from a >> >> vendor), everything works fine: >> >> >> >> <?xml version="1.0" encoding="utf-8"?> >> >> <SomeObject> >> >> ..... >> >> </SomeObject> >> >> >> >> Deserialize without issues into: >> >> >> >> [XmlRoot] >> >> class SomeObject >> >> { >> >> .... >> >> } >> >> >> >> Could somebody let me know what am I doing wrong? I even tried to > add >> the >> >> namespace in the class' constructor, with the same result, like > this: >> >> >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] >> >> class SomeObject >> >> { >> >> [XmlNamespaceDeclarations] >> >> public XmlSerializerNamespaces xmlns = new >> XmlSerializerNamespaces(); >> >> public SomeObject() >> >> { >> >> xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); >> >> xmlns.Add( "someobj", > @ http://www.abcinc.com/objectdefinition ); >> >> } >> >> } >> >> >> >> Thanks a lot! >> >> >> >> Mike >> >> >> >> >> > >> > >> > > > begin 666 test.xml M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB=71F+3@B/SX-"CQ297!O M<G0@>&UL;G,](FAT=' Z+R]S8VAE;6%S+FUI8W)O<V]F="YC;VTO<W%L<V5R M=F5R+W)E<&]R=&EN9R\R,# S+S$P+W)E<&]R=&1E9FEN:71I;VXB('AM;&YS M.G)D/2)H='1P.B\O<V-H96UA<RYM:6-R;W-O9G0N8V]M+U-13%-E<G9E<B]R M97!O<G1I;F<O<F5P;W)T9&5S:6=N97(B/@T*(" \4FEG:'1-87)G:6X^,6EN M/"]2:6=H=$UA<F=I;CX-"B @/$)O9'D^#0H@(" @/%)E<&]R=$ET96US/@T* M(" @(" @/%1A8FQE($YA;64](G1A8FQE0W5S=&]M(CX-"B @(" @(" @/$AE M:6=H=#XP+C<U:6X\+TAE:6=H=#X-"B @(" @(" @/%-T>6QE("\^#0H@(" @ M(" @(#Q(96%D97(^#0H@(" @(" @(" @/%1A8FQE4F]W<SX-"B @(" @(" @ M(" @(#Q486)L95)O=SX-"B @(" @(" @(" @(" @/$AE:6=H=#XP+C(U:6X\ M+TAE:6=H=#X-"B @(" @(" @(" @(" @/%1A8FQE0V5L;',^#0H@(" @(" @ M(" @(" @(" @/%1A8FQE0V5L;#X-"B @(" @(" @(" @(" @(" @(#Q297!O M<G1)=&5M<SX-"B @(" @(" @(" @(" @(" @(" @/%1E>'1B;W@@3F%M93TB M86-C;W5N=%]I9"(^#0H@(" @(" @(" @(" @(" @(" @(" @/%-T>6QE/@T* M(" @(" @(" @(" @(" @(" @(" @(" @/%!A9&1I;F=,969T/C)P=#PO4&%D M9&EN9TQE9G0^#0H@(" @(" @(" @(" @(" @(" @(" @(" \5&5X=$%L:6=N
Mike, The XML you posted deserializes fine with classes generated with the XSDObjectGen tool [0] I mentioned in my first post. I added a schemaLocation attribute to schema 0: <xs:import namespace=" http://schemas.microsoft.com/SQLServer/reporting/reportdesign er" schemaLocation="schema1.xml" /> for the tool to pick up the second schema when generating the classes. HTH, Christoph Schittko MVP XML http://weblogs.asp.net/cschittko [0] http://apps.gotdotnet.com/xmltools/xsdobjgen/ [quoted text, click to view] > -----Original Message----- > From: Mike Sarbu [mailto:m_sarbu@yahoo.com] > Posted At: Monday, December 27, 2004 10:40 PM > Posted To: microsoft.public.dotnet.xml > Conversation: Deserialization issue > Subject: Re: Deserialization issue > > Well, I'm trying to deserialize an RDL file, generated by Visual Studio. > Please find the file attached. > > Thanks, > Mike > > > "Christoph Schittko [MVP]" <INVALIDEMAIL@austin.rr.com> wrote in message > news:uTHrQPJ7EHA.1452@TK2MSFTNGP11.phx.gbl... > > Can you post what XML files your dealing with? You said that they are > > generated by a Microsoft tool. Could you say which tool? > > > > HTH, > > Christoph Schittko > > MVP XML > > http://weblogs.asp.net/cschittko > > > > > >> -----Original Message----- > >> From: Mike Sarbu [mailto:m_sarbu@yahoo.com] > >> Posted At: Monday, December 27, 2004 9:46 PM > >> Posted To: microsoft.public.dotnet.xml > >> Conversation: Deserialization issue > >> Subject: Re: Deserialization issue > >> > >> Hi Dino, > >> > >> Thanks a lot for the pointers you gave me, they were great. > > Unfortunately, > >> I > >> still have problems. > >> > >> Sorry for the missing quotes in the example that I posted, I typed it > >> instead of doing a copy-paste. In the real file the quotes were > > present. > >> > >> Now about my issues: > >> > >> 1. The publisher (which is Microsoft) didn't publish the schema. > >> 2. xsd.exe cannot infer the schema from the xml file because of an > > error > >> in > >> the xml document: "The same table (somenamehere) cannot be the child > > table > >> in two nested relations". Now the xml file is generated by a Microsoft > >> tool, > >> so I would've expected it to be correct ... > >> 3. Even when I delete the offending elements, I can succesfully > > generate > >> the > >> schema, I then generate the class, which looks identical to the one > > you've > >> generated, but I get the same error when deserializing it. > >> > >> Thanks a lot for any other piece of advice that may help, > >> > >> Mike > >> > >> "Dino Chiesa [Microsoft]" <dinoch@online.microsoft.com> wrote in > > message > >> news:esdG5%23Q6EHA.2552@TK2MSFTNGP09.phx.gbl... > >> > Mike, > >> > to solve these sorts of problems, you can try working in the > > opposite > >> > direction. When I want to de-serialize a document of a particular > >> schema, > >> > here's what I do: > >> > > >> > 1. infer the schema from the document using xsd.exe (only necessary > > if > >> no > >> > schema is available. Really, the doc publisher should give you a > >> schema, > >> > you shouldn't have to infer it) > >> > > >> > 2. generate classes from that schema, using xsd.exe /c > >> > > >> > 3. build a test driver (20 lines of code) that instantiates the > > class > >> and > >> > then serializes it. Compare to the xml document you are trying to > >> match. > >> > You can then iterate on your schema or the generated class, tweaking > > it > >> to > >> > match what you want. > >> > > >> > > >> > ----- > >> > > >> > In your case, > >> > > >> > A. the > >> > xmlns:someobj= http://www.abcinc.com/objectdefinition > >> > is not valid XML. Need quotes around this namespace value. > >> > > >> > B. you did not specify the rest of the XML doc, but the assignment > > of > >> the > >> > someobj prefix corresponding to the > >> http://www.abcinc.com/objectdefinition > >> > namespace seems to be unnecessary. This will not break your > >> > de-serialization, but it is superfluous. > >> > > >> > C. the class I got by following the steps above was this: > >> > > >> > > >> > > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc. > > co > >> m/objectdefinition")] > >> > > >> > > [System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc. > > co > >> m/objectdefinition", > >> > IsNullable=false)] > >> > public class SomeObject { > >> > public string SomeField; > >> > } > >> > > >> > > >> > And it de-serialized your XML (with the necessary quotes added, and > > one > >> > element added for illustration) just fine. > >> > > >> > D. to produce a similar XML doc by serializing, use > >> > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); > >> > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // this > > will > >> be > >> > the default (no prefix) namespace in the XML doc, eg, xmlns="..." > >> > > >> > before serializing, and be sure to specify this ns in the > > Serialize() > >> > step. > >> > > >> > s1.Serialize(xmlWriter, so, ns); > >> > > >> > -Dino > >> > > >> > > >> > > >> > > >> > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message > >> > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... > >> >> Hello all, > >> >> > >> >> I have an XML file like this: > >> >> > >> >> <?xml version="1.0" encoding="utf-8"?> > >> >> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" > >> >> xmlns:someobj= http://www.abcinc.com/objectdefinition> > >> >> ..... > >> >> </SomeObject> > >> >> > >> >> And I want to deserialize it, so I created a class: > >> >> > >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > >> >> class SomeObject > >> >> { > >> >> .... > >> >> } > >> >> > >> >> When calling the 'Deserialize' method of a serializer I get an > > error > >> >> "There's an error in the XML document (2,2)". > >> >> > >> >> If I don't use namespaces (which I cannot aford, since I get the > > file > >> >> from a > >> >> vendor), everything works fine: > >> >> > >> >> <?xml version="1.0" encoding="utf-8"?> > >> >> <SomeObject> > >> >> ..... > >> >> </SomeObject> > >> >> > >> >> Deserialize without issues into: > >> >> > >> >> [XmlRoot] > >> >> class SomeObject > >> >> { > >> >> .... > >> >> } > >> >> > >> >> Could somebody let me know what am I doing wrong? I even tried to > > add > >> the > >> >> namespace in the class' constructor, with the same result, like > > this: > >> >> > >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] > >> >> class SomeObject > >> >> { > >> >> [XmlNamespaceDeclarations] > >> >> public XmlSerializerNamespaces xmlns = new > >> XmlSerializerNamespaces(); > >> >> public SomeObject() > >> >> { > >> >> xmlns.Add( "", @" http://www.abcinc.com/objectdefinition" ); > >> >> xmlns.Add( "someobj",
Thank you very much, I can see that works fine. I was also able to find the schema for the RDL, it is actually supplied by MS. I then generated the class using xsd.exe, and it works like a charm. Thank you and also thanks Dino for the pointers. Mike [quoted text, click to view] "Christoph Schittko [MVP]" <INVALIDEMAIL@austin.rr.com> wrote in message news:uG6Bp0U7EHA.2192@TK2MSFTNGP14.phx.gbl... > Mike, > > The XML you posted deserializes fine with classes generated with the > XSDObjectGen tool [0] I mentioned in my first post. I added a > schemaLocation attribute to schema 0: > > <xs:import > namespace=" http://schemas.microsoft.com/SQLServer/reporting/reportdesign > er" schemaLocation="schema1.xml" /> > > for the tool to pick up the second schema when generating the classes. > > HTH, > Christoph Schittko > MVP XML > http://weblogs.asp.net/cschittko > > > > > > > [0] http://apps.gotdotnet.com/xmltools/xsdobjgen/ > >> -----Original Message----- >> From: Mike Sarbu [mailto:m_sarbu@yahoo.com] >> Posted At: Monday, December 27, 2004 10:40 PM >> Posted To: microsoft.public.dotnet.xml >> Conversation: Deserialization issue >> Subject: Re: Deserialization issue >> >> Well, I'm trying to deserialize an RDL file, generated by Visual > Studio. >> Please find the file attached. >> >> Thanks, >> Mike >> >> >> "Christoph Schittko [MVP]" <INVALIDEMAIL@austin.rr.com> wrote in > message >> news:uTHrQPJ7EHA.1452@TK2MSFTNGP11.phx.gbl... >> > Can you post what XML files your dealing with? You said that they > are >> > generated by a Microsoft tool. Could you say which tool? >> > >> > HTH, >> > Christoph Schittko >> > MVP XML >> > http://weblogs.asp.net/cschittko >> > >> > >> >> -----Original Message----- >> >> From: Mike Sarbu [mailto:m_sarbu@yahoo.com] >> >> Posted At: Monday, December 27, 2004 9:46 PM >> >> Posted To: microsoft.public.dotnet.xml >> >> Conversation: Deserialization issue >> >> Subject: Re: Deserialization issue >> >> >> >> Hi Dino, >> >> >> >> Thanks a lot for the pointers you gave me, they were great. >> > Unfortunately, >> >> I >> >> still have problems. >> >> >> >> Sorry for the missing quotes in the example that I posted, I typed > it >> >> instead of doing a copy-paste. In the real file the quotes were >> > present. >> >> >> >> Now about my issues: >> >> >> >> 1. The publisher (which is Microsoft) didn't publish the schema. >> >> 2. xsd.exe cannot infer the schema from the xml file because of an >> > error >> >> in >> >> the xml document: "The same table (somenamehere) cannot be the > child >> > table >> >> in two nested relations". Now the xml file is generated by a > Microsoft >> >> tool, >> >> so I would've expected it to be correct ... >> >> 3. Even when I delete the offending elements, I can succesfully >> > generate >> >> the >> >> schema, I then generate the class, which looks identical to the one >> > you've >> >> generated, but I get the same error when deserializing it. >> >> >> >> Thanks a lot for any other piece of advice that may help, >> >> >> >> Mike >> >> >> >> "Dino Chiesa [Microsoft]" <dinoch@online.microsoft.com> wrote in >> > message >> >> news:esdG5%23Q6EHA.2552@TK2MSFTNGP09.phx.gbl... >> >> > Mike, >> >> > to solve these sorts of problems, you can try working in the >> > opposite >> >> > direction. When I want to de-serialize a document of a > particular >> >> schema, >> >> > here's what I do: >> >> > >> >> > 1. infer the schema from the document using xsd.exe (only > necessary >> > if >> >> no >> >> > schema is available. Really, the doc publisher should give you a >> >> schema, >> >> > you shouldn't have to infer it) >> >> > >> >> > 2. generate classes from that schema, using xsd.exe /c >> >> > >> >> > 3. build a test driver (20 lines of code) that instantiates the >> > class >> >> and >> >> > then serializes it. Compare to the xml document you are trying > to >> >> match. >> >> > You can then iterate on your schema or the generated class, > tweaking >> > it >> >> to >> >> > match what you want. >> >> > >> >> > >> >> > ----- >> >> > >> >> > In your case, >> >> > >> >> > A. the >> >> > xmlns:someobj= http://www.abcinc.com/objectdefinition >> >> > is not valid XML. Need quotes around this namespace value. >> >> > >> >> > B. you did not specify the rest of the XML doc, but the > assignment >> > of >> >> the >> >> > someobj prefix corresponding to the >> >> http://www.abcinc.com/objectdefinition >> >> > namespace seems to be unnecessary. This will not break your >> >> > de-serialization, but it is superfluous. >> >> > >> >> > C. the class I got by following the steps above was this: >> >> > >> >> > >> >> >> > > [System.Xml.Serialization.XmlTypeAttribute(Namespace=" http://www.abcinc. >> > co >> >> m/objectdefinition")] >> >> > >> >> >> > > [System.Xml.Serialization.XmlRootAttribute(Namespace=" http://www.abcinc. >> > co >> >> m/objectdefinition", >> >> > IsNullable=false)] >> >> > public class SomeObject { >> >> > public string SomeField; >> >> > } >> >> > >> >> > >> >> > And it de-serialized your XML (with the necessary quotes added, > and >> > one >> >> > element added for illustration) just fine. >> >> > >> >> > D. to produce a similar XML doc by serializing, use >> >> > XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); >> >> > ns.Add( "", " http://www.abcinc.com/objectdefinition" ); // > this >> > will >> >> be >> >> > the default (no prefix) namespace in the XML doc, eg, > xmlns="..." >> >> > >> >> > before serializing, and be sure to specify this ns in the >> > Serialize() >> >> > step. >> >> > >> >> > s1.Serialize(xmlWriter, so, ns); >> >> > >> >> > -Dino >> >> > >> >> > >> >> > >> >> > >> >> > "Mike Sarbu" <m_sarbu@yahoo.com> wrote in message >> >> > news:Omz4Eq95EHA.4028@TK2MSFTNGP15.phx.gbl... >> >> >> Hello all, >> >> >> >> >> >> I have an XML file like this: >> >> >> >> >> >> <?xml version="1.0" encoding="utf-8"?> >> >> >> <SomeObject xmlns=" http://www.abcinc.com/objectdefinition" >> >> >> xmlns:someobj= http://www.abcinc.com/objectdefinition> >> >> >> ..... >> >> >> </SomeObject> >> >> >> >> >> >> And I want to deserialize it, so I created a class: >> >> >> >> >> >> [XmlRoot(Namespace="someobj", ElementName="SomeObject")] >> >> >> class SomeObject >> >> >> { >> >> >> .... >> >> >> } >> >> >> >> >> >> When calling the 'Deserialize' method of a serializer I get an >> > error >> >> >> "There's an error in the XML document (2,2)". >> >> >> >> >> >> If I don't use namespaces (which I cannot aford, since I get the >> > file >> >> >> from a >> >> >> vendor), everything works fine: >> >> >> >> >> >> <?xml version="1.0" encoding="utf-8"?> >> >> >> <SomeObject> >> >> >> ..... >> >> >> </SomeObject> >> >> >> >> >> >> Deserialize without issues into: >> >> >> >> >> >> [XmlRoot]
Don't see what you're looking for? Try a search.
|