在C#中从Firebase中驱动JSON对象

Joh*_*rty 5 c# json firebase

我正在查询Firebase并检索一组对象,如下所示:

{"-K5f0ccEKkVkxTAavQKY": {
  "Appeal": {
    "ID": "1450273330435",
    "comps": [
      162248,
      162272,
      162273,
      162281,
      162544
    ],
    "property": {
      "Address": "15 Main Street",
      "propID": 169729
    },
    "timeDateStamp": "Wed Dec 16 2015 08:42:10 GMT-0500 (Eastern Standard Time)",
    "userUUID": "google:229139952703238437512",
    "year": 2016
  }
}}
Run Code Online (Sandbox Code Playgroud)

我想用这个定义将它们反序列化为对象:

public class Appeal
{
    public string ID;
    public List<string> comps;
    public AppealProperty property;
    public string timeDateStamp;
    public string UUID;
    public int year;
}

public class AppealProperty
{
    public string address;
    public string propID;
}
Run Code Online (Sandbox Code Playgroud)

我有麻烦让它反序列化.我不需要初始字符串(例如"K5f0ccEKkVkxTAavQKY").如果需要,我可以更改对象定义.我有一种感觉,字典会很有用.

Ber*_*sch 6

快速而肮脏的对象是Dictionary<string,Appeal>用作反序列化目标。到那时,它会很简单:

var firebaseLookup = JsonConvert.DeserializeObject<Dictionary<string,Appeal>>(json);
var data = firebaseLookup.Values.ToList(); // or FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

如果您必须一次获取多个对象,这种方法也可以处理这种情况,并且如果发现密钥毕竟很重要,它将为您提供使用该密钥的机会。


Ale*_*lex 5

您可以将数据序列化到下面的类中.

public class AppealProperty
{
    public string Address { get; set; }
    public int propID { get; set; }
}

public class Appeal
{
    public string ID { get; set; }
    public List<int> comps { get; set; }
    public AppealProperty property { get; set; }
    public string timeDateStamp { get; set; }
    public string userUUID { get; set; }
    public int year { get; set; }
}


public class FireBase
{
    public Appeal Appeal { get; set; }
}

public class RootObject
{
    [JsonProperty(PropertyName = " - K5f0ccEKkVkxTAavQKY")]
    public FireBase FireBaseRoot
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设您正在使用JSON.NET,那么您可以使用以下代码获取您所关注的对象:

var firebaseObject = JsonConvert.DeserializeObject<RootObject>(json);
var data = firebaseObject.FireBaseRoot.Appeal;
Run Code Online (Sandbox Code Playgroud)

如果根名称是动态的,如您的注释所示,您可以跳过根目录并直接序列化到FireBase类:

JObject parsedJson = JObject.Parse(json);
var fireBase = parsedJson.First.Children().First().ToObject(typeof (FireBase));
Run Code Online (Sandbox Code Playgroud)