WriteString() public method

public WriteString ( string str ) : void
str string
return void
示例#1
0
        public override Future WriteJson(object data, JsonWriter writer)
        {
            var po = (ParseObject)data;

            lock (po.property_lock) {

                // fold in our [ParseKey] properties
                if (po.property_keys != null) {
                    foreach (var kv in po.property_keys) {
                        object dictValue = null;
                        po.properties.TryGetValue (kv.Key, out dictValue);
                        var propValue = kv.Value.GetValue (data, null);
                        if ((propValue != null && !propValue.Equals (dictValue)) ||
                            (propValue == null && dictValue != null)) {
                            po.properties [kv.Key] = propValue;
                            po.updated_properties.Add (kv.Key);
                        }
                    }
                }

                if (po.updated_properties.Count == 0)
                    return Future.Fulfilled;

                writer.StartObject ();

                foreach (var key in po.updated_properties) {
                    if (key == null)
                        continue; //FIXME: this really should never happen

                    writer.WriteKey (key);

                    var value = po.properties [key];
                    if (value is DateTime) {
                        writer.StartObject ();
                        writer.WriteKey ("__type");
                        writer.WriteString ("Date");
                        writer.WriteKey ("iso");
                        writer.WriteString (ToString ((DateTime)value));
                        writer.EndObject ();
                        continue;

                    } else if (value is byte []) {
                        throw new NotImplementedException ("Write byte [] data");

                    } else if (value is ParseObject) {
                        var obj = (ParseObject)value;
                        ParseTypeAttribute pta = null;
                        if ((pta = (ParseTypeAttribute)obj.GetType ().GetCustomAttributes (typeof (ParseTypeAttribute), true).SingleOrDefault ()) == null
                            || !pta.Inline)
                        {
                            obj.Save ().Wait ();
                            writer.StartObject ();
                            writer.WriteKey ("__type");
                            writer.WriteString ("Pointer");
                            writer.WriteKey ("className");
                            writer.WriteString (obj.pointerClassName);
                            writer.WriteKey ("objectId");
                            writer.WriteString (obj.ObjectId);
                            writer.EndObject ();
                            continue;
                        }

                    } else if (value is ParseFile) {
                        var file = (ParseFile)value;
                        file.Save ().Wait ();
                        writer.StartObject ();
                        writer.WriteKey ("__type");
                        writer.WriteString ("File");
                        writer.WriteKey ("name");
                        writer.WriteString (file.RemoteName);
                        writer.EndObject ();
                        continue;

                    } else if (value is ParseGeoPoint) {
                        var geo = (ParseGeoPoint)value;
                        writer.StartObject ();
                        writer.WriteKey ("__type");
                        writer.WriteString ("GeoPoint");
                        writer.WriteKey ("latitude");
                        writer.WriteValue (geo.Latitude);
                        writer.WriteKey ("longitude");
                        writer.WriteValue (geo.Longitude);
                        writer.EndObject ();
                        continue;
                    }

                    writer.WriteValue (value).Wait ();
                }

                writer.EndObject ();
            }

            return Future.Fulfilled;
        }