Rhino.NativeJSON.Str C# (CSharp) Method

Str() private static method

private static Str ( object key, Scriptable holder, NativeJSON state ) : object
key object
holder Scriptable
state NativeJSON
return object
		private static object Str(object key, Scriptable holder, NativeJSON.StringifyState state)
		{
			object value = null;
			if (key is string)
			{
				value = GetProperty(holder, (string)key);
			}
			else
			{
				value = GetProperty(holder, System.Convert.ToInt32(((Number)key)));
			}
			if (value is Scriptable)
			{
				object toJSON = GetProperty((Scriptable)value, "toJSON");
				if (toJSON is Callable)
				{
					value = CallMethod(state.cx, (Scriptable)value, "toJSON", new object[] { key });
				}
			}
			if (state.replacer != null)
			{
				value = state.replacer.Call(state.cx, state.scope, holder, new object[] { key, value });
			}
			if (value is NativeNumber)
			{
				value = ScriptRuntime.ToNumber(value);
			}
			else
			{
				if (value is NativeString)
				{
					value = ScriptRuntime.ToString(value);
				}
				else
				{
					if (value is NativeBoolean)
					{
						value = ((NativeBoolean)value).GetDefaultValue(ScriptRuntime.BooleanClass);
					}
				}
			}
			if (value == null)
			{
				return "null";
			}
			if (value.Equals(true))
			{
				return "true";
			}
			if (value.Equals(false))
			{
				return "false";
			}
			if (value is CharSequence)
			{
				return Quote(value.ToString());
			}
			if (value is Number)
			{
				double d = System.Convert.ToDouble(((Number)value));
				if (d == d && d != double.PositiveInfinity && d != double.NegativeInfinity)
				{
					return ScriptRuntime.ToString(value);
				}
				else
				{
					return "null";
				}
			}
			if (value is Scriptable && !(value is Callable))
			{
				if (value is NativeArray)
				{
					return Ja((NativeArray)value, state);
				}
				return Jo((Scriptable)value, state);
			}
			return Undefined.instance;
		}