-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
An issue occurs for us when you try to index a JObject as a document (using Nest) like this:
client.Index<JObject>(finalProposition, i => i
.Index("telecom_propositions")
.Type("proposition")
.Id(docId))The request fails with a 400 because of "malformed content". When you inspect the request being sent, the JSON at first appears to miss its opening bracket. It took me a while to figure it out but it's not a malformed object that's being sent, but rather a list of JSON properties concatenated by a newline. Properties don't start with a bracket which explains the missing bracket.
The reason that it's not serializing the JObject as an object is this code:
It checks if the data is an IEnumerable<object>, which is true because a JObject is an IEnumerable<object> and from then on it treats the JObject as a list of items to serialize and not a singular object.
Expected behavior for me would be that it just serialized the whole JObject at once and that it would be possible to index a document from a JObject.
The reason this behavior is unexpected to me is that using the search API to get back a JObject works perfectly. It also works for the update document API (we use the DocAsUpsert route as a workaround for this issue) but not with the index API. It also works as expected when you use the bulk API to index JObject documents.
Suggested fix would be either a special-case check if data is JObject or perhaps for data is IDictionary<string, object> in which case it would just serialize the whole object as happens on line 66.