我有Json字符串,如下所示
{
"JsonValues":{
"id": "MyID",
"values": {
"value1":{
"id": "100",
"diaplayName": "MyValue1"
},
"value2":{
"id": "200",
"diaplayName": "MyValue2"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想将Json字符串转换为以下类
class ValueSet
{
[JsonProperty("id")]
public string id
{
get;
set;
}
[JsonProperty("values")]
public List<Value> values
{
get;
set;
}
}
class Value
{
public string id
{
get;
set;
}
public string DiaplayName
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我的反序列化代码是
JavaScriptSerializer js = new JavaScriptSerializer();
StreamReader sr = new StreamReader(@"ValueSetJsonString.txt");
string jsonString = sr.ReadToEnd();
var items = JsonConvert.DeserializeObject<ValueSet>(jsonString);
Run Code Online (Sandbox Code Playgroud)
但序列化后我得到空值,我怎么能解决这个问题?
Bri*_*ers 16
正如其他人已经指出的那样,您没有得到预期结果的原因是因为您的JSON与您尝试反序列化的类结构不匹配.您需要更改JSON或更改类.由于其他人已经展示了如何更改JSON,我将采取相反的方法.
要匹配您在问题中发布的JSON,您的类应定义如下.请注意,我做了以下更改:
Wrapper在JSON中添加了一个与外部对象相对应的类.Values将ValueSet类的属性从a List<Value>更改为a,Dictionary<string, Value>因为valuesJSON中的属性包含对象,而不是数组.[JsonProperty]属性来匹配JSON对象中的属性名称.类定义:
class Wrapper
{
[JsonProperty("JsonValues")]
public ValueSet ValueSet { get; set; }
}
class ValueSet
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("values")]
public Dictionary<string, Value> Values { get; set; }
}
class Value
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("diaplayName")]
public string DisplayName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您需要反序列化到Wrapper类中,而不是ValueSet类.然后,您可以得到ValueSet从Wrapper.
var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;
Run Code Online (Sandbox Code Playgroud)
这是一个工作程序来演示:
class Program
{
static void Main(string[] args)
{
string jsonString = @"
{
""JsonValues"": {
""id"": ""MyID"",
""values"": {
""value1"": {
""id"": ""100"",
""diaplayName"": ""MyValue1""
},
""value2"": {
""id"": ""200"",
""diaplayName"": ""MyValue2""
}
}
}
}";
var valueSet = JsonConvert.DeserializeObject<Wrapper>(jsonString).ValueSet;
Console.WriteLine("id: " + valueSet.Id);
foreach (KeyValuePair<string, Value> kvp in valueSet.Values)
{
Console.WriteLine(kvp.Key + " id: " + kvp.Value.Id);
Console.WriteLine(kvp.Key + " name: " + kvp.Value.DisplayName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
id: MyID
value1 id: 100
value1 name: MyValue1
value2 id: 200
value2 name: MyValue2
Run Code Online (Sandbox Code Playgroud)
我发现上面的链接非常有用,因为它通过从实际返回的JSON生成它们来纠正我的C#类.
然后我打电话给:
JsonConvert.DeserializeObject<RootObject>(jsonString);
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
您是否检查过这条线是否完美运行并且您的字符串具有价值?
string jsonString = sr.ReadToEnd();
如果是,请在最后一行尝试此代码:
ValueSet items = JsonConvert.DeserializeObject<ValueSet>(jsonString);
或者如果你有一个 json 数组,你可以使用这样的列表:
List<ValueSet> items = JsonConvert.DeserializeObject<List<ValueSet>>(jsonString);
祝你好运
| 归档时间: |
|
| 查看次数: |
108275 次 |
| 最近记录: |