简体   繁体   English

使用json.net反序列化netsted json字符串

[英]Deserialize netsted json string with json.net

jsonstring = 
{
    "10000010.SH": {
        "TOTALTM": 45,
        "STARTDATE": "20150209",
        "UNDERLYINGWINDCODE": "510050.SH",
        "EXE_MODE": "call",
        "WIND_CODE": "10000010.SH",
        "LASTTRADINGDATE": "20150325",
        "EXE_ENDDATE": "20150325",
        "MAINT_MARGIN": null,
        "EXE_TYPE": "Euro",
        "US_TYPE": "ETF",
        "SETTLEMENTMETHOD": "asset",
        "US_NAME": "50ETF",
        "US_CODE": "510050"
    },
    "10000009.SH": {
        "TOTALTM": 45,
        "STARTDATE": "20150209",
        "UNDERLYINGWINDCODE": "510050.SH",
        "EXE_MODE": "call",
        "WIND_CODE": "10000009.SH",
        "LASTTRADINGDATE": "20150325",
        "EXE_ENDDATE": "20150325",
        "MAINT_MARGIN": null,
        "EXE_TYPE": "Euro",
        "US_TYPE": "ETF",
        "SETTLEMENTMETHOD": "asset",
        "US_NAME": "50ETF",
        "US_CODE": "510050"
    },
    "10000003.SH": {
        "TOTALTM": 45,
        "STARTDATE": "20150209",
        "UNDERLYINGWINDCODE": "510050.SH",
        "EXE_MODE": "call",
        "WIND_CODE": "10000003.SH",
        "LASTTRADINGDATE": "20150325",
        "EXE_ENDDATE": "20150325",
        "MAINT_MARGIN": null,
        "EXE_TYPE": "Euro",
        "US_TYPE": "ETF",
        "SETTLEMENTMETHOD": "asset",
        "US_NAME": "50ETF",
        "US_CODE": "510050"
    },
    "10000008.SH": {
        "TOTALTM": 45,
        "STARTDATE": "20150209",
        "UNDERLYINGWINDCODE": "510050.SH",
        "EXE_MODE": "call",
        "WIND_CODE": "10000008.SH",
        "LASTTRADINGDATE": "20150325",
        "EXE_ENDDATE": "20150325",
        "MAINT_MARGIN": null,
        "EXE_TYPE": "Euro",
        "US_TYPE": "ETF",
        "SETTLEMENTMETHOD": "asset",
        "US_NAME": "50ETF",
        "US_CODE": "510050"
    },
    "10000006.SH": {
        "TOTALTM": 45,
        "STARTDATE": "20150209",
        "UNDERLYINGWINDCODE": "510050.SH",
        "EXE_MODE": "call",
        "WIND_CODE": "10000006.SH",
        "LASTTRADINGDATE": "20150325",
        "EXE_ENDDATE": "20150325",
        "MAINT_MARGIN": null,
        "EXE_TYPE": "Euro",
        "US_TYPE": "ETF",
        "SETTLEMENTMETHOD": "asset",
        "US_NAME": "50ETF",
        "US_CODE": "510050"
    }
}

For simplicity I reduct to only 3 elements, and in fact there are more than 100. I only want to extract the key names, which are "10000010.SH", "10000003.SH", "10000006.SH" and so on. 为简单起见,我只还原3个元素,实际上有100个以上。我只想提取键名,分别是“ 10000010.SH”,“ 10000003.SH”,“ 10000006.SH”,等等。 I deserialize it to an object type, but how to extract the string I want? 我将其反序列化为对象类型,但是如何提取所需的字符串?

Object result= JsonConvert.DeserializeObject(jsonstring);

Or is there any convenient way? 还是有什么方便的方法? Thanks! 谢谢!

  var deser = new JavaScriptSerializer()
        .Deserialize<Dictionary<string, Dictionary<string, string >>>(val);
    var justDaily = deser["jsonstring"];

You can use Linq with Json.Net 您可以在Json.Net上使用Linq

var keys = JObject.Parse(jsonstring)
            .Properties()
            .Select(x => x.Name)
            .ToList();

You can Deserialize it like this 您可以像这样反序列化

Dictionary<dynamic, NumberSH> ser = JsonConvert.DeserializeObject<Dictionary<dynamic, NumberSH>>(jsonstr);
foreach(var k in ser)
{
    Console.WriteLine(k.Key);
}

The class structure would look like 类结构看起来像

public class NumberSH
{

    [JsonProperty("TOTALTM")]
    public int TOTALTM { get; set; }

    [JsonProperty("STARTDATE")]
    public string STARTDATE { get; set; }

    [JsonProperty("UNDERLYINGWINDCODE")]
    public string UNDERLYINGWINDCODE { get; set; }

    [JsonProperty("EXE_MODE")]
    public string EXE_MODE { get; set; }

    [JsonProperty("WIND_CODE")]
    public string WIND_CODE { get; set; }

    [JsonProperty("LASTTRADINGDATE")]
    public string LASTTRADINGDATE { get; set; }

    [JsonProperty("EXE_ENDDATE")]
    public string EXE_ENDDATE { get; set; }

    [JsonProperty("MAINT_MARGIN")]
    public object MAINT_MARGIN { get; set; }

    [JsonProperty("EXE_TYPE")]
    public string EXE_TYPE { get; set; }

    [JsonProperty("US_TYPE")]
    public string US_TYPE { get; set; }

    [JsonProperty("SETTLEMENTMETHOD")]
    public string SETTLEMENTMETHOD { get; set; }

    [JsonProperty("US_NAME")]
    public string US_NAME { get; set; }

    [JsonProperty("US_CODE")]
    public string US_CODE { get; set; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM