(多少)複雑なjsonオブジェクトの属性を取得しようとしていますが、運がないとしています。私は、JSONからC#クラスを生成するjson2csharp.comに行って、これだ(ソート)複合Jsonオブジェクトの属性にアクセスするにはどうすればよいですか?
{
"displayFieldName": "REPNAME",
"fieldAliases": {
"DISTRICT": "DISTRICT",
"REPNAME": "REPNAME"
},
"fields": [
{
"name": "DISTRICT",
"type": "esriFieldTypeDouble",
"alias": "DISTRICT"
},
{
"name": "REPNAME",
"type": "esriFieldTypeString",
"alias": "REPNAME",
"length": 150
}
],
"features": [
{
"attributes": {
"DISTRICT": 21,
"REPNAME": "Ira Anders"
}
}
]
}
:
public class FieldAliases
{
public string DISTRICT { get; set; }
public string REPNAME { get; set; }
}
public class Field
{
public string name { get; set; }
public string type { get; set; }
public string alias { get; set; }
public int? length { get; set; }
}
public class Attributes
{
public int DISTRICT { get; set; }
public string REPNAME { get; set; }
}
public class Feature
{
public Attributes attributes { get; set; }
}
public class RootObject
{
public string displayFieldName { get; set; }
public FieldAliases fieldAliases { get; set; }
public List<Field> fields { get; set; }
public List<Feature> features { get; set; }
}
私は」をクエリから生成さ
自体は次のようになりますJSONオブジェクト、 "属性"オブジェクトを取得しようとしていて、DISTRICTとREPNAME(21とIra Andersでなければなりません)を返します。私はまた、私たちにjavaScriptSerializerを試してみたこれを行うには3つのまたは4種類の方法を試してみましたが、それはまだ
Attributes attr = new Attributes();
MemoryStream stream1 = new MemoryStream(Encoding.UTF8.GetBytes(MoRepjson));
stream1.Position = 0;
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Attributes));
attr = deserializer.ReadObject(stream1) as Attributes;
string dist = attr.DISTRICT.ToString();
string repname = attr.REPNAME;
stream1.Close();
を動作しません -
DataContractJsonSerializerクラスを使用する:私は、次の方法がそれを試してみましたクラス、それはまた、動作しません:
JavaScriptSerializer ser = new JavaScriptSerializer();
Attributes attr = ser.Deserialize<Attributes>(MoRepjson);
string dist = attr.DISTRICT.ToString();
string repname = attr.REPNAME;
そしてJSON.NETライブラリを使用して - 再び動作しません:
Attributes attr = JsonConvert.DeserializeObject<Attributes>(MoRepjson);
string dist = attr.DISTRICT.ToString();
string repname = attr.REPNAME;
"dist"と "repname"という文字列が私のWebページにあります。何らかの理由で、私がそれを実行すると、DISTRICTは通常 "0"を表示します(上記の私のjsonが21を示すはずであることを示しています)。どこがどのようにゼロになるか分かりません。 REPNAME変数には、何も表示されません。
私は、このような
Attributes attr = new Attributes { DISTRICT = 9999, REPNAME = "Some Representative" };
...など退屈でつまらない、単純なJSONオブジェクトハードコーディングされたオブジェクトを作成した場合...私は(そのようrepname = attr.REPNAMEとして)DISTRICTとREPNAMEへのアクセス問題はありません。実際の/実際のjsonにアクセスして問題が発生したときだけです。私はないんだけれども、正しく「REPNAMEを」(表示
私はソートの「仕事」に得ている唯一のことは、このような
RootObject ro = JsonConvert.DeserializeObject<RootObject>(MoRepjson);
string test = ro.displayFieldName;
...としてRootObjectにアクセスすることです...なぜREPNAMEを表示していて、DISTRICTではないのか)。しかし、もし私がjsonオブジェクト全体にもっと深くしようとすると...
...私はレンガの壁にぶつかります。ちょうどそれを一体のために私は...と私のRootObjectに... ...
public Feature features { get; set; }
を
public List<Feature> features { get; set; }
を交換してみました...しかし、それはどちらか動作しません。
実際に属性以外のクラスは気にしませんが、属性オブジェクトに直接アクセスしようとすると空になります。私がRootObjectのカウントを取得したときに(正確な)「1」のカウントを取得したら、何かを返すことを知っているので、私はそれをどうやって得るのか分かりません。
ご協力いただければ幸いです。ありがとう!
それがうまくいった!私はグローバルな公開オブジェクトをテストしなければならなかった。ありがとう!間違いなく他の何かが今間違って行くでしょう。 :/ – JohnA