Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET将JSON字符串反序列化为对象_C#_Json_Json.net_Json Deserialization - Fatal编程技术网

C#.NET将JSON字符串反序列化为对象

C#.NET将JSON字符串反序列化为对象,c#,json,json.net,json-deserialization,C#,Json,Json.net,Json Deserialization,我试图将JSON反序列化为对象“MarginBalance”。当我尝试反序列化此JSON时: {"totalValue":"0.00091979","pl":"0.00000000","lendingFees":"0.00000000","netValue":"0.00091979","totalBorrowedValue":"0.00000000","currentMargin":"1.00000000"} 为此目的: public class MarginBalance : IMargin

我试图将JSON反序列化为对象“MarginBalance”。当我尝试反序列化此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; }
}
它返回null。以下是我的反序列化代码:

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;
}
var postData=newdictionary();
var数据=PostData(“returnMarginAccountSummary”,PostData);
如果(数据!=null)
{
//永远都到不了这里
var returnData=newdictionary();
foreach(data.Keys中的字符串键)
{
returnData.Add(key,data[key]);
}
返回数据;
}
[MethodImpl(MethodImplOptions.AggressiveInline)]
私有T PostData(字符串命令、字典PostData)
{
返回ApiWebClient.PostData(命令,PostData);
} 
公共T PostData(字符串命令、字典PostData)
{
添加(“命令”,命令);
Add(“nonce”,Helper.GetCurrentHttpPostNonce());
var jsonString=PostString(Helper.apirlhttpsrelativetrading,postData.ToHttpPostString());
var output=JsonSerializer.DeserializeObject(jsonString);
返回输出;
}

希望有人能解决它!我一整天都在努力。。。提前感谢。

Json中的数字被撇号包围,这意味着它们是字符串,而不是数字。您可以尝试从Json字符串中的数字中删除撇号,或者将对象中的字段类型从double更改为string


MarginBalance
中使用的
JsonProperty
属性属于
Newtonsoft.Json.Serialization
命名空间。要反序列化对象,应使用
JsonConvert.DeserializeObject(jsonString)

显示更多代码。如何进行反序列化?@dotctor我已将我的问题Change
JsonSerializer.DeserializeObject
更新为
JsonConvert.DeserializeObject
@dotctor当我更改为JsonConvert时,我收到以下错误:Newtonsoft.Json.JsonSerializationException类型的异常发生在Newtonsoft.Json.dll中,但未得到处理用户代码中的其他信息:将值“0.00091977”转换为类型“Jojatekok.PoloniexAPI.WalletTools.MarginBalance”时出错。路径“totalValue”,第1行,位置26。我尝试了该操作,并收到一个类型为“Newtonsoft.Json.JsonSerializationException”的异常,该异常发生在Newtonsoft.Json.dll中,但未在用户代码中处理。其他信息:将值“0.00091977”转换为类型“Jojatekok.PoloniexAPI.WalletTools.MarginBalance”时出错。路径“totalValue”,第1行,位置26。@Nickmccomb您仍在反序列化为
IDictionary
。如果您只有一个
MarginBalance
,请不要这样做。Json中的数字被撇号包围,这意味着它们是字符串,而不是数字。您可以尝试从Json字符串中的数字中删除撇号,或者将对象中的字段类型从double更改为string。@hvd-是的,我想也是这样,只要更改我的代码,我就会将您的答案标记为完整的,如果有效:)@Nickmccomb此答案中已经有
jsonvert.DeserializeObject
(只是在我编辑它之前不可读,但它就在那里),所以我认为接受这个答案是可以的