可以说我有一个模型:
public class MyModel
{
public string Name { get; set; }
public string[] Size { get; set; }
public string Weight { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和Json这样:
{
"name" : "widget",
"details" : {
"size" : [
"XL","M","S",
]
"weight" : "heavy"
}
}
Run Code Online (Sandbox Code Playgroud)
我一直试图找到一种方法来序列化我的对象,而不是为"名称"创建一个模型,为"细节"创建一个模型,因为这不能很好地映射到我的数据库,所以需要一点点玩杂耍来填充类.
我可以在JsonConvert.PopulateObject()上进行多次传递,如:
var mod = new MyModel();
JsonConvert.PopulateObject(json.ToString(), mod);
JsonConvert.PopulateObject(json["details"].ToString(), mod);
Run Code Online (Sandbox Code Playgroud)
但在我的真实代码中,我运行多个线程,PopulateObject不是线程安全的,它会阻塞应用程序.PopulateJsonAsync()的注释表示不使用它,而是在PopulateObject()上使用Task.Run().
这不起作用,当我调用它时仍然锁定应用程序:
await Task.Run(() => JsonConvert.PopulateObject(response.ToString(), productDetail));
if (response["results"].HasValues)
{
await Task.Run(() => JsonConvert.PopulateObject(response["results"][0].ToString(), productDetail));
}
Run Code Online (Sandbox Code Playgroud)
一些人通过,但最终应用程序完全线程锁定.如果我删除PopulateObject线程都终止正常,所以我很确定这个函数不是线程安全的.
是否有一个简洁的线程安全的方法来一步填充我的对象?