2017-02-23 68 views
0

Я реплицирую запрос branch.io на C# для API и пытаюсь создать URL-адрес, сериализуя их снова через NewtonSoft. Я хорошо воспроизвел основную часть запроса на создание URL-адреса и создал URL-адрес. Но у меня проблема, когда я попытался определить мои desktop_url и marketing_title в запросе.

{"type":2, "branch_key":"key_test_lerbZ22zyjfpfFtl2auzukafywi220dN", "campaign":"new_product_annoucement", "channel":"email", "tags":["monday", "test123"], "data":"{\"name\": \"Alex\", \"email\": \"[email protected]\", \"user_id\": \"12346\", \"$desktop_url\": \"https://www.google.com\",\"$marketing_title\": \"This is Awesome\"}"} 

Как вы можете видеть из запроса JSON, десктоп URL и маркетинг названия оба имеет знак $ на передних $ desktop_url то есть и $ marketing_title.

Я думаю, что это проблема, которая препятствует мне создавать реплику в C#. Я знаю, что запрос верен, как если бы вы запускали его сейчас, он определенно будет ссылаться на страницу поиска Google.

Мой C# код выглядит следующим образом:

[HttpPost] 
    public string GetWithBody([FromBody] getInfo info) 
    { 
     String mesh = info.affCode + "=========>" + info.appType; 

     using (var client = new HttpClient()) 
     { 
      var request = new branchIOinfo() 
      { 
       type = 2, 
       branch_key = "key_test_lerbZ22zyjfpfFtl2auzukafywi220dN", 
       campaign = info.appType, 
       alias = info.affCode, 
       data = new BranchRequestData 
       { 
        desktop_url = "https://www.google.com/" 
       } 
      }; 

      var response = client.PostAsync("https://api.branch.io/v1/url", 
       new StringContent(JsonConvert.SerializeObject(request).ToString(), 
        Encoding.UTF8, "application/json")).Result; 

      if (response.IsSuccessStatusCode) 
      { 
       dynamic content = JsonConvert.DeserializeObject(
        response.Content.ReadAsStringAsync() 
        .Result); 

       return content.url; 
      } 
      else 
      { 
       return "Error Creating URL"; 
      } 

Моя C# Модель выглядит следующим образом:

namespace BranchIOAPI.Models 
{ 
    public class getInfo 
    { 
    public string affCode { get; set; } 
    public string appType { get; set; } 
    } 

public class branchIOinfo 
{ 
    public int type { get; set; } 
    public string branch_key { get; set; } 
    public string campaign { get; set; } 
    public string alias { get; set; } 
    public BranchRequestData data { get; set; } 

} 

public class BranchRequestData 
{ 
    public string desktop_url { get; set; } 
} 
} 

Как я должен повторить, что знак $ в этом коде или что это правильный путь повторите этот запрос JSON.

ответ

2

В то время как это упоминает Ветвь, вопрос в том, как изменить имена свойств во время сериализации при использовании C#.

Я считаю, что соответствующий подход здесь будет использовать JsonPropertyAttribute: http://www.newtonsoft.com/json/help/html/JsonPropertyName.htm

Таким образом, в определении класса вы могли бы сделать что-то вроде этого:

public class BranchRequestData 
{ 
    [JsonProperty("$desktop_url")] 
    public string desktop_url { get; set; } 
} 
0

Алекс из отделения здесь:

Параметры с $ в начале просто наследие конвенции в нашей системе. Вы можете указать их так же, как и любой другой параметр, поэтому, если в C# нет чего-то особенного, я забыл, просто используя $desktop_url и $marketing_url, поскольку ключи внутри объекта data должны работать нормально.

+1

Эй Алекс, проблема C# на самом деле не признают $ как символ, который можно привязать к JSONString. Он вернет ошибку, поскольку этот префикс не распознается. Таким образом, это должно быть сделано, как сказал dwestgate. public class BranchRequestData { [JsonProperty ("$ desktop_url")] public string desktop_url {get; задавать; } } – Tyson