Bug 13290 - DataContractSerializer should write actual type when serializing object-DataMember
Summary: DataContractSerializer should write actual type when serializing object-DataM...
Status: NEW
Alias: None
Product: Class Libraries
Classification: Mono
Component: WCF assemblies (show other bugs)
Version: master
Hardware: PC Linux
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2013-07-17 08:30 UTC by foka
Modified: 2013-08-07 03:36 UTC (History)
2 users (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments
Sample app (1.17 KB, text/plain)
2013-07-17 08:30 UTC, foka
Details

Description foka 2013-07-17 08:30:02 UTC
Created attachment 4358 [details]
Sample app

DataContractSerializer should write actual type when serializing DataMember declared as object.
On MS.NET actual type is written (expected). On Linux Mono there's no actual type explicitly written.

For this simple contract:

	[KnownType(typeof(Child))]
	[KnownType(typeof(Child[]))]
	public class Parent
	{
		public object Anything { get; set; }
	}

	public class Child { }

when you serialize this object: new Parent { Anything = new [] {new Child()} };
on MS.NET (expected) you get:

<?xml version="1.0" encoding="utf-16"?>
<Parent xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Contract">
        <Anything i:type="ArrayOfChild">
                <Child />
        </Anything>
</Parent>

on Mono you get:

<?xml version="1.0" encoding="utf-16"?>
<Parent xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Contract">
     <Anything>
          <Child />
     </Anything>
</Parent>

If you try deserialize the last (Mono) message, you'll get an exception.
Check attached application. Compile it with: mcs Program.cs -r:System.Runtime.Serialization.dll
Comment 1 foka 2013-07-17 08:36:43 UTC
This is my quick solution:
https://github.com/foka/mono/commit/cf8d835486bdc4d422f9e58c3d9daf5e0487d891
I hope it can be done better.

Note You need to log in before you can comment on or make changes to this bug.