小编Rit*_*itz的帖子

使用JSON.net将JSON解析为匿名对象[]

我有一个json字符串,我想解析成一个对象[]:

{ "Thing":"Thing","That":{"Item1":15,"Item2":"Moo","Item3":{"Count":27,"Type":"Frog"}}}
Run Code Online (Sandbox Code Playgroud)

生成的匿名对象数组需要包含原始json对象的每个属性.我的问题是JsonConvert.DeserializeObject返回一种JContainer或JObject.我无法找到返回普通香草c#对象的方法.

这是我之前尝试过的一系列非功能性代码.我不必使用JSON.net,但我想尽可能确保与生成json的代码兼容.

JObject deserialized = JsonConvert.DeserializeObject<JObject>(dataString);
object[] data =
deserialized.Children().Where(x => x as JProperty != null).Select(x => x.Value<Object>()).ToArray();
Run Code Online (Sandbox Code Playgroud)

更新

我正在使用生成的对象数组通过反射调用方法.解析的json对象的类型在运行时是未知的.问题的关键在于JObject或JContainer对象类型与被调用方法的签名不匹配.动态具有相同的副作用.正在调用方法如下:

Type _executionType = typeof(CommandExecutionDummy);
CommandExecutionDummy provider = new CommandExecutionDummy();
var method = _executionType.GetMethod(model.Command,
               BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
if (method == null)
   throw new InvalidCommandException(String.Format("Invalid Command - A command with a name of {0} could not be found", model.Command));
return method.Invoke(provider, model.CommandData);
Run Code Online (Sandbox Code Playgroud)

c# json json.net json-deserialization

15
推荐指数
2
解决办法
2万
查看次数

.net锁 - 两个问题

关于.net中的Lock()构造的两个问题

首先,我知道如果一个对象被锁定在一个类中,而另一个类试图锁定同一个对象,则会产生死锁.但为什么?我在MSDN上看过它,但MSDN很少清楚.

----编辑问题一----仍然困惑.我有一个主线程(UI线程),产生许多Threadpool线程.每个子线程在使用数据之前锁定数据.这样每次都很好.

如果我然后尝试从UI线程锁定相同的数据以检查我是否应该为边缘情况创建新线程,我几乎每次都会创建死锁.

----编辑问题二----其次,如果我有一个复合对象,我锁定它的所有子对象也被锁定了?短代码演示:

internal sealed class Update
{
    //Three objects instantiated via other external assemblies
    public DataObject One { get; set; }
    public DataObject Two { get; set; }
    public ReplayStatus Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我调用lock(UpdateObject)是三个内部对象中的每一个,并且所有子对象都被锁定了?

所以我应该做这样的事情来防止线程与我的数据对象一起玩:

Lock(UpdateObject.One)
{
    Lock(UpdateObject.Two)
    {
        Lock(UpdateObject.Status)
        {
            //Do Stuff
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading

3
推荐指数
1
解决办法
741
查看次数

标签 统计

c# ×2

.net ×1

json ×1

json-deserialization ×1

json.net ×1

multithreading ×1