无法在C#中使用动态更改的节点反序列化JSON字符串

san*_*s90 0 .net c# serialization json deserialization

我的JSON看起来像这样 -

{"0abc34m": {"time": "13 Mar 17, 4:50:02 PM", "pd": "oscar"}}
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码对此进行反序列化 -

MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(JSONstring));
ms.Position = 0;
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Rootobject));
Rootobject myDataTypObj = (Rootobject)jsonSerializer.ReadObject(ms);
Run Code Online (Sandbox Code Playgroud)

我使用Visual Studio函数"粘贴JSON作为类"函数来生成这些类 -

public class Rootobject
{
    public _00A462 _00a462 { get; set; }
}

public class _00A462
{
    public string time { get; set; }
    public string pd { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想访问JSON的"time"和"pd"成员.

JSON的第一部分是每次收到新的JSON字符串时都会更改的数字.

我没有错误但我的myDataTypObj具有_00A462的空值.

我只关心层次结构中二级的字段.我正确地接近这个问题,这里有什么问题?

Sir*_*ufo 5

一种简单的方法是使用JSON.Net并将JSON反序列化为 Dictionary

using Newtonsoft.Json;

class Program
{
    static void Main( string[] args )
    {
        var jsonString = "{\"0abc34m\":{\"time\":\"13 Mar 17, 4:50:02 PM\",\"pd\":\"oscar\"}}";
        Dictionary<string, Data> data;
        data = JsonConvert.DeserializeObject<Dictionary<string, Data>>( jsonString );
        var key = data.First().Key; // 0abc34m
        var time = data.First().Value.TimeString; // 13 Mar 17, 4:50:02 PM
        var pd = data.First().Value.DataString; // oscar
    }
}

public class Data
{
    [JsonProperty("time")]
    public string TimeString { get; set; }
    [JsonProperty("pd")]
    public string DataString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)