static StockJsonBuffers() { JsonBufferWriter writer = new JsonBufferWriter(2); writer.WriteStartObject(); writer.WriteEndObject(); EmptyObject = writer.GetBuffer(); }
static StockJsonBuffers() { JsonBufferWriter writer = new JsonBufferWriter(2); writer.WriteStartObject(); writer.WriteEndObject(); EmptyObject = writer.GetBuffer(); }
public virtual bool Import(ImportContext context, string name, JsonReader reader) { if (context == null) { throw new ArgumentNullException("context"); } if (reader == null) { throw new ArgumentNullException("reader"); } JsonBufferWriter tailw = _tailw; if (tailw == null) { tailw = _tailw = new JsonBufferWriter(); tailw.WriteStartObject(); } tailw.WriteMember(name); tailw.WriteFromReader(reader); return(true); }
private static ObjectConstructionResult TryCreateObject(ImportContext context, ConstructorInfo ctor, NamedJsonBuffer[] members) { Debug.Assert(context != null); Debug.Assert(ctor != null); Debug.Assert(members != null); ParameterInfo[] parameters = ctor.GetParameters(); if (parameters.Length > members.Length) { return(null); } int[] bindings = Bind(context, parameters, members); int argc = 0; object[] args = null; JsonBufferWriter tailw = null; for (int i = 0; i < bindings.Length; i++) { int binding = bindings[i] - 1; if (binding >= 0) { if (args == null) { args = new object[parameters.Length]; } Type type = parameters[binding].ParameterType; JsonBuffer arg = members[i].Buffer; args[binding] = context.Import(type, arg.CreateReader()); argc++; } else { if (tailw == null) { tailw = new JsonBufferWriter(); tailw.WriteStartObject(); } NamedJsonBuffer member = members[i]; tailw.WriteMember(member.Name); tailw.WriteFromReader(member.Buffer.CreateReader()); } } if (tailw != null) { tailw.WriteEndObject(); } if (argc != parameters.Length) { return(null); } object obj = ctor.Invoke(args); JsonBuffer tail = tailw != null ? tailw.GetBuffer() : StockJsonBuffers.EmptyObject; return(new ObjectConstructionResult(obj, tail.CreateReader())); }
private static ObjectConstructionResult TryCreateObject(ImportContext context, ConstructorInfo ctor, NamedJsonBuffer[] members) { Debug.Assert(context != null); Debug.Assert(ctor != null); Debug.Assert(members != null); ParameterInfo[] parameters = ctor.GetParameters(); if (parameters.Length > members.Length) return null; int[] bindings = Bind(context, parameters, members); int argc = 0; object[] args = null; JsonBufferWriter tailw = null; for (int i = 0; i < bindings.Length; i++) { int binding = bindings[i] - 1; if (binding >= 0) { if (args == null) args = new object[parameters.Length]; Type type = parameters[binding].ParameterType; JsonBuffer arg = members[i].Buffer; args[binding] = context.Import(type, arg.CreateReader()); argc++; } else { if (tailw == null) { tailw = new JsonBufferWriter(); tailw.WriteStartObject(); } NamedJsonBuffer member = members[i]; tailw.WriteMember(member.Name); tailw.WriteFromReader(member.Buffer.CreateReader()); } } if (tailw != null) tailw.WriteEndObject(); if (argc != parameters.Length) return null; object obj = ctor.Invoke(args); JsonBuffer tail = tailw != null ? tailw.GetBuffer() : StockJsonBuffers.EmptyObject; return new ObjectConstructionResult(obj, tail.CreateReader()); }