variable una tipo serializeobject serializar recorrer que newtonsoft leer jsonconvert example deserializar como cadena json serialization query-string http-get

una - serializar y deserializar json c#



¿Forma estandarizada de serializar JSON para consultar la cadena? (4)

¿Qué tal si prueba esto enviándolos de la siguiente manera?

http://example.com/api/wtf? [-columns][]=name& [-columns][]=column& [-where][-or][customer_id]=1& [-where][-or][services]=schedule& [-limit]=5& [return]=table&

Lo intenté con un cliente REST

Y en el lado del servidor (Ruby con Sinatra) revisé los parámetros, me da exactamente lo que quieres. :-)

Estoy tratando de construir una API relajante y estoy luchando sobre cómo serializar datos JSON en una HTTP query string .

Hay una serie de argumentos obligatorios y opcionales que deben pasarse en la solicitud, por ejemplo (representados como un objeto JSON a continuación):

{ "-columns" : [ "name", "column" ], "-where" : { "-or" : { "customer_id" : 1, "services" : "schedule" } }, "-limit" : 5, "return" : "table" }

Necesito admitir un número variado de clientes diferentes, así que estoy buscando una forma estandarizada para convertir este objeto json en una cadena de consulta. ¿Hay uno y cómo se ve?

Otra alternativa es permitir que los usuarios simplemente pasen el objeto json en el cuerpo del mensaje, pero leo que debo evitarlo ( HTTP GET con el cuerpo de la solicitud ).

¿Alguna idea?

Editar para aclarar:

Enumerar cómo algunos idiomas diferentes codifican el objeto json dado arriba:

  • jQuery usando $.param : -columns [] = name & -columns [] = column & -where [-or] [customer_id] = 1 & -where [-or] [services] = schedule & -limit = 5 & return = column
  • PHP usando http_build_query : -columns [0] = name & -columns [1] = column & -where [-or] [customer_id] = 1 & -where [-or] [services] = schedule & -limit = 5 & return = column
  • Perl usando URI::query_form : -columns = name & -columns = column & -where = HASH (0x59d6eb8) & - limit = 5 & return = column
  • Perl usando complex_to_query : -columns: 0 = name & -columns: 1 = column & -limit = 5 & -where.-or.customer_id = 1 & -where.-or.services = schedule & return = column

jQuery y PHP es muy similar. Perl usando complex_to_query también es bastante similar a ellos. Pero ninguno se ve exactamente igual.


No existe un estándar único para que JSON consulte la serialización de cadenas, así que hice una comparación de algunos serializadores JSON y los resultados son los siguientes:

JSON: {"_id":"5973782bdb9a930533b05cb2","isActive":true,"balance":"$1,446.35","age":32,"name":"Logan Keller","email":"[email protected]","phone":"+1 (952) 533-2258","friends":[{"id":0,"name":"Colon Salazar"},{"id":1,"name":"French Mcneil"},{"id":2,"name":"Carol Martin"}],"favoriteFruit":"banana"} Rison: (_id:''5973782bdb9a930533b05cb2'',age:32,balance:''$1,446.35'',email:''[email protected]'',favoriteFruit:banana,friends:!((id:0,name:''Colon Salazar''),(id:1,name:''French Mcneil''),(id:2,name:''Carol Martin'')),isActive:!t,name:''Logan Keller'',phone:''+1 (952) 533-2258'') O-Rison: _id:''5973782bdb9a930533b05cb2'',age:32,balance:''$1,446.35'',email:''[email protected]'',favoriteFruit:banana,friends:!((id:0,name:''Colon Salazar''),(id:1,name:''French Mcneil''),(id:2,name:''Carol Martin'')),isActive:!t,name:''Logan Keller'',phone:''+1 (952) 533-2258'' JSURL: ~(_id~''5973782bdb9a930533b05cb2~isActive~true~balance~''!1*2c446.35~age~32~name~''Logan*20Keller~email~''logankeller*40artiq.com~phone~''*2b1*20*28952*29*20533-2258~friends~(~(id~0~name~''Colon*20Salazar)~(id~1~name~''French*20Mcneil)~(id~2~name~''Carol*20Martin))~favoriteFruit~''banana) QS: _id=5973782bdb9a930533b05cb2&isActive=true&balance=$1,446.35&age=32&name=Logan Keller&[email protected]&phone=+1 (952) 533-2258&friends[0][id]=0&friends[0][name]=Colon Salazar&friends[1][id]=1&friends[1][name]=French Mcneil&friends[2][id]=2&friends[2][name]=Carol Martin&favoriteFruit=banana URLON: $_id=5973782bdb9a930533b05cb2&isActive:true&balance=$1,446.35&age:32&name=Logan%20Keller&[email protected]&phone=+1%20(952)%20533-2258&friends@$id:0&name=Colon%20Salazar;&$id:1&name=French%20Mcneil;&$id:2&name=Carol%20Martin;;&favoriteFruit=banana QS-JSON: isActive=true&balance=%241%2C446.35&age=32&name=Logan+Keller&email=logankeller%40artiq.com&phone=%2B1+(952)+533-2258&friends(0).id=0&friends(0).name=Colon+Salazar&friends(1).id=1&friends(1).name=French+Mcneil&friends(2).id=2&friends(2).name=Carol+Martin&favoriteFruit=banana

El más corto entre ellos es la Notación de Objeto URL .


Otra opción podría ser node-querystring . También utiliza un esquema similar a los que ha enumerado hasta ahora.

Está disponible tanto en npm como en npm , por lo que lo he estado usando.


URL-encode ( https://en.wikipedia.org/wiki/Percent-encoding ) su texto JSON y colóquelo en un único parámetro de cadena de consulta. por ejemplo, si quiere pasar {"val": 1} :

mysite.com/path?json=%7B%22val%22%3A%201%7D

Tenga en cuenta que si su JSON es demasiado largo, se encontrará con un problema de limitación de longitud de URL. En ese caso usaría POST con un cuerpo (sí, lo sé, enviar un POST cuando quiera buscar algo no es "puro" y no encaja bien en el paradigma REST, pero tampoco es su consulta específica basada en JSON de dominio idioma).