static void InterfaceTest() { string yaml = @" Description: All automobiles Name: All autos Vehicles: - type: Car make: BMW - type: Truck make: Volvo "; //ChoYamlReader.DeserializeText<Auto>(yaml, configuration: // new ChoYamlRecordConfiguration().Map<Auto, Auto.F>(f => f.Vehicles, m => m)) using (var parser = ChoYamlReader <Auto> .LoadText(yaml) .WithField(f => f.Vehicles, itemRecordTypeSelector: (o) => { dynamic rec = ChoDynamicObject.New(o as IDictionary <object, object>); if (rec.type == "Car") { return(typeof(Car)); } else { return(typeof(Truck)); } }) ) { foreach (var e in parser) { Console.WriteLine(e.Dump()); } } }
static void CustomSerialization() { dynamic address = new ChoDynamicObject(); address.Street = "10 River Rd"; address.City = "Princeton"; dynamic state = new ChoDynamicObject(); state.State = "NJ"; state.Zip = "09930"; address.State = state; StringBuilder sb = new StringBuilder(); using (var w = new ChoXmlWriter(sb) .WithXmlAttributeField("id") .WithXmlElementField("address") .Setup(s => s.RecordFieldWriteError += (o, e) => Console.WriteLine(e.Exception.ToString())) .Setup(s => s.RecordFieldSerialize += (o, e) => { e.Source = "dd"; //e.Source = "<{0}>DD</{0}>".FormatString(e.PropertyName); //e.Handled = true; }) ) { //w.Write(new KeyValuePair<int, string>(1, "MM")); //w.Write(new KeyValuePair<int, string>(1, "MM")); w.Write(new { id = "2s->", address = address }); w.Write(new { id = "1s->", address = address }); } Console.WriteLine(sb.ToString()); }
public static void DynamicXmlTest() { ChoDynamicObject src = new ChoDynamicObject("Item1"); IDictionary <string, object> x = src as IDictionary <string, object>; x.Add("@Id", 100); x.Add("@Name", "Raj"); //x.Add("@@Value", "Hello!"); ChoDynamicObject sd = new ChoDynamicObject(); ((IDictionary <string, object>)sd).Add("@@Value", "0001-01-11T00:00:00"); x.Add("StartDate", sd); ChoDynamicObject id1 = new ChoDynamicObject("Id"); ((IDictionary <string, object>)id1).Add("@@Value", 101); ChoDynamicObject id2 = new ChoDynamicObject(); ((IDictionary <string, object>)id2).Add("@@Value", 102); ChoDynamicObject id3 = new ChoDynamicObject(); ((IDictionary <string, object>)id3).Add("@@Value", 103); x.Add("SelectedIds", new object[] { id1, id2, id3 }); Console.WriteLine(src.GetXml()); }
static void DeserializeSubClassedItems() { string yaml = @" Type: Item Name: fuel_cansiter DisplayName: Fuel Canister Sprite: fuel_canister_1 MaxStackSize: 10 MaxHP: 15 Value: 30 Components: - Explosive: - Damage: 10 - Range: 25 - Burnable: - FlameSize: 10 - HealthThreshold: 0.4 "; using (var r = ChoYamlReader <Thing> .LoadText(yaml) .WithField(f => f.Components, itemConverter: (o) => { dynamic rec = ChoDynamicObject.New(o as IDictionary <object, object>); if (rec.ContainsKey(nameof(Explosive))) { IList list = rec.Explosive.ToArray(); var dict = list.OfType <IDictionary <object, object> >().SelectMany(d => d.ToList()).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); return(dict.ConvertToObject(typeof(Explosive))); } else if (rec.ContainsKey(nameof(Burnable))) { IList list = rec.Burnable.ToArray(); var dict = list.OfType <IDictionary <object, object> >().SelectMany(d => d.ToList()).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); return(dict.ConvertToObject(typeof(Burnable))); } else { return(null); } }) ) { foreach (var rec in r) { Console.WriteLine(rec.Dump()); } } }
static void Sample12() { using (var jr = new ChoJSONReader("sample12.json") ) { foreach (var x1 in jr) { foreach (var z1 in x1) { dynamic newObj = new ChoDynamicObject(); newObj.name = z1.Key; foreach (var kvp in (ChoDynamicObject)z1.Value) { ((ChoDynamicObject)newObj).AddOrUpdate(kvp.Key, kvp.Value); } Console.WriteLine(ChoUtility.DumpAsJson(newObj)); } } } }
static void IntArrayTest() { dynamic address = new ChoDynamicObject(); address.Street = "10 River Rd"; address.City = "Princeton"; dynamic state = new ChoDynamicObject(); state.State = "NJ"; state.Zip = "09930"; address.State = state; using (var w = new ChoCSVWriter("intarray.csv") .Setup(s => s.RecordFieldWriteError += (o, e) => Console.WriteLine(e.Exception.ToString())) .Configure(c => c.NestedColumnSeparator = '/') ) { //w.Write(new KeyValuePair<int, string>(1, "MM")); //w.Write(new KeyValuePair<int, string>(1, "MM")); w.Write(new { id = "1s->", address = address }); } }