Recently, Ian Randall contributed something really cool to the DynamicViewModel codebase: Support for binding to a JSON object. I find this exciting!
In the trunk of DynamicViewModel you can find an example that uses the Stack Exchange API. It is a WPF application for searching the Stack Overflow Users.
All API responses are JSON in Stack Exchange API. Ian took advantage of that and wrote a DynamicViewModelFactory that contains the factory method below:
public static DynamicViewModel Create(string json) { DynamicViewModel result; if (!json.TryCreateDynamic(out result)) { throw new ArgumentException("parameter was not a valid JSON string"); } return result; }
This factory method creates an instance of a DynamicViewModel from a JSON formatted string. In order to use it you need to write code similar to the one below:
var uriString = "http://api.stackoverflow.com/1.1/users?filter=" + e.Argument; var request = CreateHttpWebRequest(uriString); var response = request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { var json = streamReader.ReadToEnd(); dynamic viewModel = DynamicViewModelFactory.Create(json); }
And some XAML action:
<TextBlock Grid.Column="0" VerticalAlignment="Center" Margin="4,0,0,0" Text="{Binding display_name}" /> <TextBlock Grid.Column="1" VerticalAlignment="Center" Text="{Binding reputation}" /> <local:BadgesUserControl Grid.Column="2" DataContext="{Binding badge_counts}" />
The source code is here. Thanks to Ian Randall!