是否可以使用JsonProperty批注将嵌套的Json属性映射到非嵌套的.NET成员?假设你有一些这样的Json:
{
"id":9999,
"created_date":"Thu, 23 Jun 2011 12:56:24 +0000",
"pos":{
"type":"someType",
"coordinates":[
59.323,
18.0654
]
}
}
并希望使用
将其反序列化为扁平类MyClassJsonConvert.DeserializeObject<MyClass>(jsonstr);
可以使用注释将Json坐标列表映射到下面的类中的Lat和Lng:
public class MyClass {
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("created_date")]
public DateTime Created { get; set; }
[JsonProperty("????")]
public float Lat { get; set; }
[JsonProperty("?????")]
public float Lng { get; set; }
}
好奇。我总是可以像这样定义类,它似乎工作正常:
public class MyClass {
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("date_created")]
public DateTime Created { get; set; }
[JsonProperty("pos")]
public PosClass Pos { get; set; }
}
public class PosClass
{
public List<float> coordinates { get; set; }
}
答案 0 :(得分:1)
从个人经验来看,我在尝试重新使用我的实体进行通信(JSON,XML ......等)之前一直在努力,但在密切关注现有模式之后,我发现另外还有"data transfer objects"你已经拥有的内部/存储实体将解放我的通信模型,而我付出的唯一代价就是接受手动,但直接,两者之间手动编码转换的努力。
如果你坚持自己拥有的东西并且表现没什么大不了的话,那么.NET反思就是你的朋友。
答案 1 :(得分:0)
对于非常复杂的JSON情况,我非常喜欢Demis Bellot使用ServiceStack.Text进行的手动映射方法。这允许我将httpResponse.Content传递给JsonConverter.Convert(字符串json)方法。
这样可以保持模型对象的干净清晰。
var place = JsonObject.Parse(JsonCentroid)
.Object("place")
.ConvertTo(x => new Place
{
WoeId = x.Get<int>("woeid"),
PlaceTypeName = x.Get(""),
PlaceTypeNameAttrs = x.Object("placeTypeName attrs"),
Name = x.Get("Name"),
BoundingBox = x.Object("boundingBox")
.ConvertTo(y => new BoundingBox
{
SouthWest = y.Object("southWest").ConvertTo(toCentroid),
NorthEast = y.Object("northEast").ConvertTo(toCentroid)
}),
});
您可以看到完整的测试here。
答案 2 :(得分:0)
我认为如果你根本不打算它会更好。 为什么不这样做有很多原因:
最好的选择是阅读一些关于使用JSon进行数据爬网的内容 - here。 非常简单实用。
之后 - 如果你仍然坚持,你可以将它包装在一个不错的新课程中。