小编pjs*_*pjs的帖子

如何在JObject中添加或更新JProperty值

我目前正在使用以下扩展方法来执行此任务,但似乎应该有一些现有的包含方法或扩展来执行此操作(或至少是其中的一部分).如果Json.NET中没有任何内容,那么建议的过程是什么,或者我如何更改下面的代码以更接近推荐的过程.

public static partial class ExtensionMethods
{
    public static JObject SetPropertyContent(this JObject source, string name, object content)
    {
        var prop = source.Property(name);

        if (prop == null)
        {
            prop = new JProperty(name, content);

            source.Add(prop);
        }
        else
        {
            prop.Value = JContainer.FromObject(content);
        }

        return source;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以确认上面的代码适用于基本用法,但我不确定它是否适用于更广泛的用法.

我有这个扩展返回a的原因JObject是你可以链接调用(多次调用此扩展或其他方法和扩展).

var data = JObject.Parse("{ 'str1': 'test1' }");

data
    .SetPropertyContent("str1", "test2")
    .SetPropertyContent("str3", "test3");

// {
//   "str1": "test2",
//   "str3": "test3"
// }
Run Code Online (Sandbox Code Playgroud)

c# json json.net

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

如何调用GetMethod获取带有泛型参数的泛型函数(不使用GetMethods)?

我知道我可以使用获取方法信息GetMethods,但我想知道如何正确地使用它GetMethods.我已经阅读了其他SO问题和答案,表明这是不可能的,或建议只使用LINQ,但这不是问题的真正答案.

在最基本的层面考虑一个静态泛型函数,它接受一个通用参数.

private static void Test<T>(T val)
{
}
Run Code Online (Sandbox Code Playgroud)

要获取此方法信息,我们可以调用Type.GetMethod("Test", BindingFlags.Static | BindingFlags.NonPublic).但是如果有一些原因我们无法使用这个简单的GetMethod签名(可能是由于多次重载),那么我们需要提供参数类型.问题是我无法创建与参数准确匹配的T val参数类型.有趣的是,我可以从方法信息(获取GetMethods)中获取参数并将其传递到GetMethod以获得所需的结果.这意味着如果只能创建适当的泛型类型(IsGenericParameter设置为true),那么我觉得这是完全可能的.

这意味着这在.NET中是完全可能的,并且只需要创建适当的类型实例.如何创建这些类型实例?如果他们不可能创造,为什么不是他们?

我创建了一个简单的小提示来展示这个问题.

.net c# generics reflection

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

标签 统计

c# ×2

.net ×1

generics ×1

json ×1

json.net ×1

reflection ×1