Skip to main content

How to handle different namespace between serialization and deserialization

Consider this scenario:

  1. You have a web service with entries in a namespace Company.Business.Entities
  2. You have matching entities on the client side in a namespace Company.Client.Entities
  3. You want to simply serialize the Business Entity, transfer over the wire and deserialize  into client enetites.
  4. Problem!!!! you can't as the namespace is not same.
Solution
  1. Put a namespace attribute on each client side and server side entity. e.g.
[DataContract(Namespace = "http://wwww.yourcompany.com/messages/entities")]

The problem with this is that you will have to add this to each and every entity.

    2. Option 2 and probably better is to use assembly attribute in assemblyinfo.cs
[assemblyContractNamespace("http://wwww.yourcompany.com/messages/entities", ClrNamespace = "Company.Client.Entities")]

Add this to both, client and Business entities. Remember to update ClrNamespace and runtime will create correct namespace for serialization and deserialization.

Happy .Netting!!!


Comments

Popular posts from this blog

Why there is semicolon at the start of a JavaScript function?

Very often while reviewing the code for my team, I will come across a semicolon at the start of JavaScript function as show below ; (function () { 'use strict'; ...and I often wondered what purpose it served. Guess what. It is an insurance to make sure your script works fine when all other scripts are merged together;  The leading ; in front of immediately-invoked function expressions (iffe) is there to prevent errors when appending the file during concatenation to a file containing an expression not properly terminated with a ;. So there you go. Now you know what that little semicolon is doing there in your code.

What is Event Sourcing?

If you scratching your head and wondering what is Event Sourcing, this is a very good article to start. https://www.erikheemskerk.nl/event-sourcing-awesome-powerful-different/ I couldn't have explained it any better.