2016-04-26 3 views
3

В настоящее время сталкивается с проблемой при создании строки JSON на C# и пытается отправить ее в веб-API с помощью WebClient.C# JSON String to Web API

В настоящее время у меня есть несколько методов, в первую очередь от того, который работает. Использование Почтальоной отправки следующего набора данных текста через к API работает правильно:

POSTMAN Dataset - Это работает в POSTMAN

{ "record": 
    { 
     "form_id": "efe4f66f-b57c-4497-a370-25c0f3d8746a", 
     "status": "240", 
     "latitude": -82.638039, 
     "longitude": 27.770787, 
     "form_values": 
     { 
      "833b": "99999", 
      "683b": "9999999", 
      "fa37": "Testing", 
      "b2e3": "Testing" 
     } 
    } 
} 

В C# Я использую несколько различных способы, чтобы построить это жало с небольшим успехом.

C# Список Method - Newtonsoft.Json.Serialization

Первый строит список, а затем с помощью Newtonsoft.Json играть с ним:

List<Parent> DataList = new List<Parent>(); 
    List<Child> Form = new List<Child.formvalues>(); 
    var Formvals = new Child.formvalues 
    { 
     ActionDescription = Row.ActionDescription, 
     ActionNotes = Row.ActionNotes, 
     ActionID = Row.ActionID, 
     AssetID = Row.AssetID 
    }; 
    Form.Add(Formvals); 

    var DataElement = new Parent 
    { 
     form_id = AppFormID, 
     latitude = Lat, 
     longitude = Long, 
     status = Row.Status, 
     form_values = Form 
    }; 
    DataList.Add(DataElement); 

    string json = JsonConvert.SerializeObject(DataList.ToArray()); 

результаты Этот код в следующая строка:

[ 
    {\"form_id\":\"efe4f66f-b57c-4497-a370-25c0f3d8746a\", 
    \"latitude\":-82.638039, 
    \"longitude\":27.770787, 
    \"status\":239, 
    \"form_values\":[ 
     {\"833b\":99999, 
     \"683b\":9999999, 
     \"fa37\":\"Testing\", 
     \"b2e3\":\"Testing\" 
     }] 
    } 
] 

Другая попытка, которую я пытаюсь сделать, нг, на мой взгляд, является самым близким до сих пор:

C# - Строка здания Метод

string Content = @"{ " 
     + "\"record\": {" 
     + "\"form_id\": "\"" + AppFormID + ""\"," 
     + "\"status\": "\"" + Row.Status + ""\"," 
     + "\"latitude\": "+ Lat + "," 
     + "\"longitude\": "+ Long + "," 
     + "\"form_values\": {" 
      + "\"833b\": "\""+Row.AssetID +""\"," 
      + "\"683b\": "\""+Row.ActionID + ""\"," 
      + "\"fa37\": "\""+Row.ActionDescription + ""\"," 
      + "\"b2e3\": "\""+Row.ActionNotes + ""\"" 
     + "}" 
     + "}" 
     + "}"; 

что результаты линии в:

{ \"record\": 
    { 
     \"form_id\": \"efe4f66f-b57c-4497-a370-25c0f3d8746a\", 
     \"status\": \"239\", 
     \"latitude\": -82.638039, 
     \"longitude\": 27.770787, 
     \"form_values\": 
     { 
      \"833b\": \"99999\", 
      \"683b\": \"9999999\", 
      \"fa37\": \"Testing\", 
      \"b2e3\": \"Testing\" 
     } 
    } 
} 

вопрос!

Итак, вопрос, кто-то может помочь мне в достижении формата в первом JSON, который я ввел в POSTMAN именно так?

ОБНОВЛЕНИЕ - 6:40 вечера

Web код клиента C# AppURLRef устанавливается в коде дальше и представляется правильным в отладчике. json - результат тестов.

var http = new WebClient(); 
http.Headers.Add(HttpRequestHeader.ContentType, "application/json"); 
var response = http.UploadString(AppURLRef, "POST", json); 

Результат обновления

"[{\"record\":{\"form_id\":\"efe4f66f-b57c-4497-a370-25c0f3d8746a\", 
\"latitude\":-82.638039, 
\"longitude\":27.770787, 
\"status\":\"240\", 
\"form_values\":   
[{\"833b\":\"99999\", 
\"683b\":\"9999999\", 
\"fa37\":\"Testing\", 
\"b2e3\":\"Testing\"}]}}]" 

ответ

1

Я бы попробовал следующее вместе с NewtonSoft.JSON.

var data = new 
{ 
    record = new 
    { 
     form_id = "efe4f66f-b57c-4497-a370-25c0f3d8746a", 
     status = "240", 
     latitude = -82.638039, 
     longitude = 27.770787, 
     form_values = new Dictionary<string, string>(); 
    } 
} 

data.record.form_values["833b"] = "99999"; 
data.record.form_values["683b"] = "9999999"; 
data.record.form_values["fa37"] = "Testing"; 
data.record.form_values["b2e3"] = "Testing"; 

Тогда получите JSON:

string json = JsonConvert.SerializeObject(data); 
+0

Единственная проблема с этим в том, что 833b и 683b не могут быть именами переменных, поскольку они начинаются с числа. И я предположил, что вы имели в виду JsonConvert.SerializeObject (данные); в использовании? – Caz1224

+0

Снимая те, я все еще получаю откат с сервера, говоря, что ему это не нравится – Caz1224

+0

Мне пришлось отказаться от WebClient(), он просто не сработает. Я включил RestClient, а затем создал JSON с вашим методом, и он отлично работает. Спасибо за помощь – Caz1224

0

Я думаю, что это очень похоже на this One. вы можете попробовать следующий код, чтобы получить требуемое требование:

var dd = { 
"FirstName": "ABC", 
"username": "abc123", 
"password": "[email protected]", 
"Cnumbers": [{ 
    "Home": "0987654321" 
}, { 
    "Company": "7654321" 
}] 
} 
3

Попробуйте следующее.

public class Record 
{ 
    [JsonProperty(PropertyName = "form_id")] 
    public string FormId { get; set; } 

    [JsonProperty(PropertyName = "status")] 
    public string Status { get; set; } 

    [JsonProperty(PropertyName = "latitude")] 
    public decimal Latitude { get; set; } 

    [JsonProperty(PropertyName = "longitude")] 
    public decimal Longitude { get; set; } 

    [JsonProperty(PropertyName = "form_values")] 
    public Dictionary<string, string> FormValues { get; set; } 
} 

public class RecordContainer 
{ 
    [JsonProperty(PropertyName = "record")] 
    public Record Record { get; set; } 
} 

Использование:

var container = new RecordContainer(); 
container.Record = new Record(); 
// Code to populate values 
JsonConvert.SerializeObject(container); 

Я использую Newtonsoft JSon сериализовать и я получаю тот же результат, что вы просили.

+0

Пробовал эту модель и API все еще жалуется на плохие данные - Остановка в отладчике показывает тот же результат, как и C# - Строка Метод Строительство – Caz1224

+0

Привет @ Caz1224, Как вы отправляете данные в Web Api с помощью веб-клиента? Если у вас есть фрагмент кода, я могу попытаться воспроизвести проблему. – Sarathy

+0

Нет Probs - я обновляю основной вопрос с помощью фрагмента кода веб-клиента – Caz1224