以下是JSON文件的示例:
{
"Object": {
"series": {
"transformation": "",
"source": "series",
"default": ""
},
"latitude": {
"transformation": "",
"source": "lat",
"default": ""
},
"longitude": {
"transformation": "",
"source": "long",
"default": ""
}
}
}
我当前使用JsonConvert.DesirializeT()
进行反序列化的类
internal class ImportedObjects
{
[JsonProperty("Object")]
public ImportedSubProperties ImportedObject { get; set; }
internal class ImportedSubProperties : ImportedObjects
{
[JsonProperty("series")]
public ImportedProperties series { get; set; }
[JsonProperty("latitude")]
public ImportedProperties latitude { get; set; }
[JsonProperty("longitude")]
public ImportedProperties longitude { get; set; }
}
}
internal class ImportedProperties
{
public string Transformation { get; set; }
public string Source { get; set; }
public string Default { get; set; }
}
当前解析代码:
using (StreamReader r = new StreamReader(file))
{
string json = r.ReadToEnd();
MappingObjects = JsonConvert.DeserializeObject<ImportedObjects>(json);
}
当只有3个属性(系列、纬度、经度(时,一切看起来都很好,但在实际文件中;经度";(X,Y,Size,…(。我的问题是:是否可以使用反序列化而不需要创建额外的50个属性?最好将所有内容直接存储到字典中。
您可以使用Dictionary<>
。
internal class ImportedObjects
{
public Dictionary<string,ImportedProperties> Object { get; set;}
}
internal class ImportedProperties
{
public string Transformation { get; set; }
public string Source { get; set; }
public string Default { get; set; }
}
我建议您将StreamReader传递给JsonTextReader,这比使用ReadToEnd更有效。
JsonSerializer serializer = new JsonSerializer();
using (StreamReader r = new StreamReader(file))
{
using( JsonTextReader reader = new JsonTextReader( r ) )
{
MappingObjects = serializer.Deserialize<ImportedObjects>( reader );
}
}