[Mono-list] XML Serialization - difference between WinCLR and Mono runtime
Daniel Lo Nigro
lists at dan.cx
Sat May 4 07:27:24 UTC 2013
Have you tried this with Mono 3.0?
On Wed, May 1, 2013 at 2:08 PM, MarLOne <InfoSeeker002 at gmail.com> wrote:
> Hi,
>
> Not sure if this has been reported - there is difference in runtime
> treatment of XML Serialization between CLR and Mono runtime.
>
> I have a class like this:
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
> using System.Runtime.Serialization;
>
> namespace SerializationDemos
> {
> [ Serializable ]
> public class WithAutoProperty
> {
> // Read only properties
> public String Name { get; private set; } // private setter
> public Int32 Age { get; private set; } // private setter
>
> public WithAutoProperty() { }
>
> public WithAutoProperty( string name, Int32 age )
> {
> this.Name = name;
> this.Age = age;
> }
> }
> }
>
> and I have a nunit test code like this:
> [Test]
> public void WithUsingAutoProperty()
> {
> String expectedName = Guid.NewGuid().ToString();
> Int32 expectedAge = 28;
> WithAutoProperty p = new WithAutoProperty( expectedName,
> expectedAge );
> UsingXmlSerialization( p, ( a, b ) =>
> {
> Assert.IsNotNull( a );
> Assert.IsTrue( a is WithAutoProperty );
> Assert.IsNotNull( b );
> WithAutoProperty g = b as WithAutoProperty;
> Assert.AreEqual( expectedName, g.Name );
> Assert.AreEqual( expectedAge, g.Age );
> } );
> }
>
> public void UsingXmlSerialization(Object expected, Action<object,
> object> testNow)
> {
> StringBuilder buffer = new StringBuilder();
> Type t = expected.GetType();
> using ( XmlWriter writer = XmlWriter.Create( buffer ) )
> {
> XmlSerializer ser = new XmlSerializer( t );
> ser.Serialize( writer, expected );
> }
>
> String xmlDoc = buffer.ToString();
> Console.WriteLine( "Xml: {0}", xmlDoc );
> buffer = null;
>
> Object regen = null;
> using ( XmlReader reader = XmlReader.Create( new StringReader(
> xmlDoc ) ) )
> {
> XmlSerializer ser = new XmlSerializer( t );
> regen = ser.Deserialize( reader );
> Assert.IsNotNull( regen );
> }
> testNow( expected, regen );
> }
>
> I built an assembly in VS2010 using .Net4.
>
> Naturally according to the .Net specification, the test method
> WithUsingAutoProperty() fails with a message like this:
> System.InvalidOperationException : Unable to generate a temporary class
> (result=1).
> error CS0200: Property or indexer '
> SerializationDemos.WithAutoProperty.Name'
> cannot be assigned to -- it is read only
> error CS0200: Property or indexer 'SerializationDemos.WithAutoProperty.Age'
> cannot be assigned to -- it is read only
>
> Then I took the assembly over to my Ubuntu 12.04 with Mono running and
> NUnit
> ran through that method with a green bar.
>
> This difference in behaviour is a source of concern.
>
> Has anyone discovered this? I am using Mono-runtime version
> 2.10.8.1-5~dhx1~precise1.
>
> It appears the Mono runtime simply ignoring the private accessor of the
> getters and setting the value anyway in contravention to the specification.
>
> I have the same result if I rebuild this project with MonoDevelop 3.0.3.2
> in
> Ubuntu 12.04. Hence it does not indicate the generation of IL code at fault
> but it is in the runtime.
>
> MarL
>
>
>
> --
> View this message in context:
> http://mono.1490590.n4.nabble.com/XML-Serialization-difference-between-WinCLR-and-Mono-runtime-tp4659562.html
> Sent from the Mono - General mailing list archive at Nabble.com.
> _______________________________________________
> Mono-list maillist - Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20130504/6353552d/attachment.html>
More information about the Mono-list
mailing list