2016-06-26 2 views
-1

Я пытаюсь десериализовать JSON в объект «MarginBalance». Когда я пытаюсь десериализации этот JSON:C# .NET Deserialize строка JSON для объекта

{"totalValue":"0.00091979","pl":"0.00000000","lendingFees":"0.00000000","netValue":"0.00091979","totalBorrowedValue":"0.00000000","currentMargin":"1.00000000"} 

к этому объекту:

public class MarginBalance : IMarginBalance 
{ 
    [JsonProperty("totalValue")] 
    public double TotalValue { get; set; } 

    [JsonProperty("pl")] 
    public double PL { get; set; } 

    [JsonProperty("lendingFees")] 
    public double LendingFees { get; set; } 

    [JsonProperty("netValue")] 
    public double NetValue { get; set; } 

    [JsonProperty("totalBorrowedValue")] 
    public double TotalBorrowedValue { get; set; } 

    [JsonProperty("currentMargin")] 
    public double CurrentMargin { get; set; } 
} 

реализации этого интерфейса:

public interface IMarginBalance 
{ 
    double TotalValue { get; } 
    double PL { get; } 
    double LendingFees { get; } 
    double NetValue { get; } 
    double TotalBorrowedValue { get; } 
    double CurrentMargin { get; } 
} 

возвращает нуль. Вот мой код десериализации:

var postData = new Dictionary<string, object>(); 
var data = PostData<IDictionary<string, MarginBalance>>("returnMarginAccountSummary", postData); 
if (data != null) 
{ 
    // never reaches here 
    var returnData = new Dictionary<string, IMarginBalance>(); 
    foreach (string key in data.Keys) 
    { 
     returnData.Add(key, data[key]); 
    } 
    return returnData; 
} 

[MethodImpl(MethodImplOptions.AggressiveInlining)] 
private T PostData<T>(string command, Dictionary<string, object> postData) 
{ 
    return ApiWebClient.PostData<T>(command, postData); 
} 

public T PostData<T>(string command, Dictionary<string, object> postData) 
{ 
    postData.Add("command", command); 
    postData.Add("nonce", Helper.GetCurrentHttpPostNonce()); 

    var jsonString = PostString(Helper.ApiUrlHttpsRelativeTrading, postData.ToHttpPostString()); 
    var output = JsonSerializer.DeserializeObject<T>(jsonString); 

    return output; 
} 

Надеюсь, кто-то сможет это исправить! Я пробовал весь день ... Спасибо заранее.

+0

Покажите нам больше кода. Как вы делаете десериализацию? – dotctor

+0

@dotctor я обновил свой вопрос – Nickmccomb

+0

изменить 'JsonSerializer.DeserializeObject' на' JsonConvert.DeserializeObject' – dotctor

ответ

1

Числа в Json окружены апострофами, то есть они являются строками, а не цифрами. Вы можете попытаться либо удалить апострофы из чисел в строке Json, либо изменить тип полей типа double на строку в объекте.

Атрибуты, используемые вами в MarginBalance, принадлежат к пространству имен Newtonsoft.Json.Serialization. Чтобы десериализовать объект, вы должны использовать JsonConvert.DeserializeObject<MarginBalance>(jsonString)

+0

Я пробовал это и получил Исключение типа «Newtonsoft.Json.JsonSerializationException» произошло в Newtonsoft.Json.dll, но не обрабатывалось в коде пользователя Дополнительная информация: Значение преобразования ошибки «0.00091977» для ввода «Jojatekok.PoloniexAPI.WalletTools.MarginBalance». Path 'totalValue', строка 1, позиция 26. – Nickmccomb

+1

@Nickmccomb Вы по-прежнему десериализуетесь как 'IDictionary '. Не делайте этого, если у вас есть только один «MarginBalance». – hvd

+0

Числа в Json окружены апострофами, то есть они являются строками, а не цифрами. Вы можете попытаться либо удалить апострофы из чисел в строке Json, либо изменить тип полей типа double на строку в объекте. –

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