2014-02-28 4 views
5

У меня есть такой код:отображения недвижимости в RestSharp для JSON не работает

using System; 
using RestSharp.Serializers; 

public class Program 
{ 
    public static void Main() 
    { 
     var obj = new Order(); 
     obj.Test = 42; 
     var serializer = new JsonSerializer(); 
     var json = serializer.Serialize(obj); 
     Console.WriteLine(json);  
    } 
} 

public class Order 
{ 
    [SerializeAs(Name = "object")] 
    public string Object 
    { 
     get { return "Order"; } 
    } 

    [SerializeAs(Name = "TestName")] 
    public int Test 
    { 
     get;set; 
    }   
} 

На основе SerializeAs атрибутов, RestSharp должны использовать имена из атрибута, а не имя свойства. Но он просто игнорирует это. Выход для этого кода:

{ 
    "Object": "Order", 
    "Test": 42 
} 

Я пропустил что-то или не работает с RestSharp?

Тот же фрагмент кода в DotNetFiddle - http://dotnetfiddle.net/ffaXUY

+0

ли это даже компилировать? 'Object' является зарезервированным ключевым словом –

+0

Мы можем использовать имена классов как имена свойств. Все нормально. Но если я буду использовать 'object', тогда он не будет компилировать –

ответ

3

Ну, RestSharp использует SimpleJson, что не имеет никаких ссылок на SerializeAs и он также не имеет собственный механизм для этого. Я нашел запрос на растяжение - https://github.com/restsharp/RestSharp/pull/331, но он был закрыт из-за SimpleJson.

В реализации по умолчанию IJsonSerializerStrategy - PocoJsonSerializerStrategy существует некоторая начальная логика для замены имени свойства, но пока это не работает. Он имеет такой метод - https://github.com/facebook-csharp-sdk/simple-json/blob/master/src/SimpleJson/SimpleJson.cs:

protected virtual string MapClrMemberNameToJsonFieldName(string clrPropertyName) 
{ 
    return clrPropertyName; 
} 

Так я просто заменил SimpleJson на Newtonsoft Json на основе выборки из этой статьи - http://blog.patrickmriley.net/2014/02/restsharp-using-jsonnet-serializer.html

+0

Но он не работает для десериализации. Как я могу получить такое поведение с данными ответа? – Neshta

Смежные вопросы