Skip to content

Instantly share code, notes, and snippets.

View winnicki's full-sized avatar

Derek Winnicki winnicki

  • SmartUse Solutions Inc.
  • Montreal, QC
View GitHub Profile
@winnicki
winnicki / Comment.cs
Last active November 11, 2022 02:27
.NET MongoDB + Realm Sync models demonstrating relationships and embedded objects
using System;
using Realms;
namespace RealmDev.Core.RealmObjects
{
public class Comment : EmbeddedObject
{
public DateTimeOffset CreatedOn { get; set; }
public string Text { get; set; }
public string Author { get; set; }
@winnicki
winnicki / GetLocationJObject.cs
Last active September 15, 2017 01:15
A Simple LINQ to JSON Query
public async Task<JObject> GetLocationJObject(int locationId)
{
return await Task.Run(() =>
{
var companyJObject = JObject.Parse(RawJson.Company); // parsing to JObject is fast even for large objects
var locationJObject = companyJObject[nameof(Company.Locations)]?
.FirstOrDefault(x => (int)x[nameof(Location.Id)] == locationId) as JObject;
return locationJObject;
})
.ConfigureAwait(false);
@winnicki
winnicki / DynamicContractResolver.cs
Created September 2, 2017 18:31
DynamicContractResolver
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace JsonPerf.Resolvers
{
/// <summary>
/// Can be used for any type to dynamically specify which properties are part of the serialization contract
readonly Lazy<DynamicContractResolver> _locationDetailsResolver =
new Lazy<DynamicContractResolver>(() =>
new DynamicContractResolver(
nameof(Models.Location.Name),
nameof(Models.Location.Address),
nameof(Models.Location.Id)));
var serializerSettings = new JsonSerializerSettings
{
ContractResolver = _locationDetailsResolver?.Value
CurrentLocationJObject[nameof(Models.Location.Name)] = CurrentLocation.Name;
CurrentLocationJObject[nameof(Models.Location.Address)] = CurrentLocation.Address;
await _locationManager.SaveLocation(CurrentLocationJObject, CurrentLocation.Id);
@winnicki
winnicki / SaveLocation.cs
Created September 2, 2017 18:24
LINQ to JSON Upsert
public async Task SaveLocation(JObject locationJObject, int locationId)
{
await Task.Run(() =>
{
var companyJObject = JObject.Parse(RawJson.Company);
companyJObject[nameof(Company.Locations)]?
.FirstOrDefault(x => (decimal)x[nameof(Location.Id)] == locationId)
.Replace(locationJObject);
});
@winnicki
winnicki / PageScrolledRx.cs
Last active October 6, 2016 02:37
An enhanced version of Android's ViewPager.PageScrolled event using Reactive Extensions.
Observable.FromEventPattern<ViewPager.PageScrolledEventArgs> (
x => _viewPager.PageScrolled += x,
x => _viewPager.PageScrolled -= x)
.Select (args => args.EventArgs)
.StartWith(new ViewPager.PageScrolledEventArgs(0, 0, 0))
.PairWithPrevious()
.Skip(1)
.Select(args => {
var scrollDirection =
args.Item1.Position != args.Item2.Position