Deserialize a property as an ExpandoObject using JSON.NET
.net-4.5, c#, expandoobject, json.net, serialization
Solution
Try this:
Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
string jsonText = JsonConvert.SerializeObject(container);
var obj = JsonConvert.DeserializeObject<ExpandoObject>(jsonText, new ExpandoObjectConverter());
I found that doing this got me an `ExpandoObject` from the call to `DeserializeObject`. I think the issue with the code you have provided is that while you are supplying an `ExpandoObjectConverter`, you are asking `Json.Net` to deserialize a `Container`, so I would imagine that the `ExpandoObjectConverter` is not being used.
Edit:
If I decorate the `Data` property with `[JsonConverter(typeof(ExpandoObjectConverter))]` and use the code:
var obj = JsonConvert.DeserializeObject<Container>(jsonText);
Then the `Data` property is deserialized to an `ExpandoObject`, while `obj` is a `Container`.
Problem
For example, there's an object like the next one: ``` public class Container { public object Data { get; set; } } ``` And it's used this way: ``` Container container = new Container { Data = new Dictionary<string, object> { { "Text", "Hello world" } } }; ``` If I deserialize a JSON string obtained from serializing the above instance, the `Data` property, even if I provide the `ExpandoObjectConverter`, it's not deserialized as an `ExpandoObject`: ``` Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter()); ``` How can I deserialize a class property assigned with an anonymous object, or at least, not concrete type as an `ExpandoObject`? EDIT: Someone answered that I could just use the dynamic object. This won't work for me. I know I could go this way, but this isn't the case because I need an ExpandoObject. Thanks. EDIT 2: Some other user answered I could deserialize a JSON string into an `ExpandoObject`. This isn't the goal of this question. I need to deserialize a concrete type having a dynamic property. In the JSON string this property could be an associative array.