Как мне сериализовать объект в формат строки запроса? - PullRequest
61 голосов
/ 27 июля 2011

Как мне сериализовать объект в формат строки запроса?Я не могу найти ответ на Google.Спасибо.

Вот объект, который я сериализирую в качестве примера.

public class EditListItemActionModel
{
    public int? Id { get; set; }
    public int State { get; set; }
    public string Prefix { get; set; }
    public string Index { get; set; }
    public int? ParentID { get; set; }
}

Ответы [ 13 ]

0 голосов
/ 10 марта 2016

Я искал решение для этого для приложения Windows 10 (UWP). Используя подход Relection, предложенный Dave , и после добавления пакета Nuget Microsoft.AspNet.WebApi.Client я использовал следующий код: который обрабатывает Url-кодирование значений свойств:

 private void AddContentAsQueryString(ref Uri uri, object content)
    {            
        if ((uri != null) && (content != null))
        {
            UriBuilder builder = new UriBuilder(uri);

            HttpValueCollection query = uri.ParseQueryString();

            IEnumerable<PropertyInfo> propInfos = content.GetType().GetRuntimeProperties();

            foreach (var propInfo in propInfos)
            {
                object value = propInfo.GetValue(content, null);
                query.Add(propInfo.Name, String.Format("{0}", value));
            }

            builder.Query = query.ToString();
            uri = builder.Uri;                
        }
    }
0 голосов
/ 02 марта 2013

Столкнувшись с аналогичной ситуацией, я выполнил сериализацию объекта в XML и передал его как параметр строки запроса.Сложность такого подхода заключалась в том, что, несмотря на кодирование, форма получения выдает исключение, говорящее «потенциально опасный запрос ...».Я нашел способ зашифровать сериализованный объект и затем кодировать, чтобы передать его в качестве параметра строки запроса.Что, в свою очередь, сделало строку запроса защищенной от несанкционированного доступа (бонусное блуждание по территории HMAC)!

FormA XML сериализует объект> шифрует сериализованную строку> кодирует> передать как строку запроса в FormB FormB дешифрует значение параметра запроса (также как и request.querystring)> десериализовать результирующую строку XML в объект, используя XmlSerializer.

Я могу поделиться своим кодом VB.NET по запросу в howIdidit-at-applecart-dot-net

0 голосов
/ 27 июля 2011

Вот что я написал, что делает то, что вам нужно.

    public string CreateAsQueryString(PageVariables pv) //Pass in your EditListItemActionModel instead
    {
        int i = 0;
        StringBuilder sb = new StringBuilder();

        foreach (var prop in typeof(PageVariables).GetProperties())
        {
            if (i != 0)
            {
                sb.Append("&");
            }

            var x = prop.GetValue(pv, null).ToString();

            if (x != null)
            {
                sb.Append(prop.Name);
                sb.Append("=");
                sb.Append(x.ToString());
            }

            i++;
        }

        Formating encoding = new Formating();
        // I am encoding my query string - but you don''t have to
        return "?" + HttpUtility.UrlEncode(encoding.RC2Encrypt(sb.ToString()));  
    }
...