Ejemplo n.º 1
0
        protected INamedList ReadNamedList(JsonReader reader)
        {
            if (reader.TokenType != JsonToken.StartObject)
                throw new ArgumentException("requires StartObject token", "reader");
            var list = new NamedList();
            string propertyName = null;
            while (reader.Read())
            {
                switch (reader.TokenType)
                {
                    case JsonToken.Date:
                        if (propertyName == null)
                            throw new InvalidOperationException("propertyName is null...");
                        list.Add(propertyName, ((DateTime)reader.Value).ToLocalTime());
                        propertyName = null;
                        break;

                    case JsonToken.Null:
                    case JsonToken.Boolean:
                    case JsonToken.Bytes:
                    case JsonToken.Float:
                    case JsonToken.Integer:
                    case JsonToken.String:
                        if (propertyName == null)
                            throw new InvalidOperationException("propertyName is null...");

                        list.Add(propertyName, reader.Value);
                        propertyName = null;
                        break;

                    case JsonToken.PropertyName:
                        if (propertyName != null)
                            throw new InvalidOperationException("this shouldn't happen ^^");
                        propertyName = reader.Value as string;
                        break;

                    case JsonToken.StartArray:
                        if (propertyName == null)
                            throw new InvalidOperationException("propertyName is null...");
                        list.Add(propertyName, ReadArray(reader));
                        propertyName = null;
                        break;

                    case JsonToken.StartObject:
                        if (propertyName == null)
                            throw new InvalidOperationException("propertyName is null...");
                        object value;
                        //Workaround because JSON doesn't know the exact type, so it would treat everything as NamedList, which differs from other formats
                        switch (propertyName)
                        {
                            //used for GET Requests
                            case "doc":
                                value = new SolrDocument(ReadNamedList(reader));
                                break;
                            //used for Logging Requests
                            case "history":
                            //used for Select Requests
                            case "response":
                                value = ReadSolrDocumentList(reader);
                                break;
                            default:
                                value = ReadNamedList(reader);
                                break;
                        }
                        list.Add(propertyName,value);
                        propertyName = null;
                        break;

                    case JsonToken.EndArray:
                    case JsonToken.EndObject:
                        if (propertyName != null)
                            throw new InvalidOperationException("this shouldn't happen ^^, again...");
                        return list;

                    case JsonToken.None:
                    case JsonToken.Comment:
                    case JsonToken.Raw:
                    case JsonToken.Undefined:
                        continue;
                    case JsonToken.StartConstructor:
                    case JsonToken.EndConstructor:
                    default:
                        throw new NotSupportedException("Json Constructor not supported!");
                }
            }
            throw new InvalidOperationException("Some shit hit the fan! - eh i mean, this won't happen, i hope :P");
        }
Ejemplo n.º 2
0
 protected void CheckDocument(SolrDocument doc, int fields)
 {
     Assert.IsNotNull(doc);
     Assert.IsNotNull(doc.Fields);
     Assert.IsTrue(doc.Fields.Count == fields);
     Assert.IsTrue((string)doc.Fields["id"].Value == "GB18030TEST");
     Assert.IsTrue(Convert.ToDouble(doc.Fields["price"].Value) == 0.0);
     Assert.IsTrue((bool)doc.Fields["inStock"].Value);
     Assert.IsTrue((long)doc.Fields["_version_"].Value == 1445086860543000576);
     Assert.IsTrue((string)((IList)doc.Fields["features"].Value)[0] == "No accents here");
     Assert.IsTrue((string)((IList)doc.Fields["features"].Value)[1] == "这是一个功能");
 }
Ejemplo n.º 3
0
 private void WriteSolrDocument(SolrDocument solrDocument, SolrBinaryStream stream)
 {
     WriteTag(SOLRDOC, stream);
     WriteTag(ORDERED_MAP, stream, solrDocument.Fields.Count);
     foreach (var entry in solrDocument.Fields)
     {
         WriteExternString(entry.Key, stream);
         WriteVal(entry.Value, stream);
     }
 }