相关疑难解决方法(0)

在C#中合并两个对象

我有一个具有各种属性的对象模型MyObject.有一次,我有两个这样的MyObject实例:实例A和实例B.如果实例B具有非空值,我想将实例A中的属性与实例B的属性进行复制和替换.

如果我只有1个具有3个属性的类,没问题,我可以轻松地对其进行硬编码(这是我开始做的).但实际上我有12个不同的对象模型,每个模型大约有10个属性.

有什么好办法呢?

.net c#

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

使用新的 Net Core 3.0 Json 时忽略属性

在 ASP.Net Core 2.2 中使用 JSON.Net 时,当序列化为 JSON 时,当其值为 null 时,我能够忽略属性:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? Created { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,当使用内置于 JSON (System.Text.Json) 的新 ASP.Net Core 3.0 时,如果某个属性的值为 null,我找不到可以忽略该属性的等效属性。

我只能找到 JsonIgnore。

我错过了什么吗?

json json.net asp.net-core-3.0 .net-core-3.0 system.text.json

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

.NET Core/System.Text.Json:枚举和添加/替换 json 属性/值

在我之前的一个问题中,我询问如何使用 System.Text.Json填充现有对象

一个很好的答案展示了一种解决方案,用 解析 json 字符串JsonDocument并用 枚举它EnumerateObject

随着时间的推移,我的 json 字符串不断演变,现在还包含一个对象数组,当使用链接答案中的代码解析它时,它会抛出以下异常:

The requested operation requires an element of type 'Object', but the target element has type 'Array'.
Run Code Online (Sandbox Code Playgroud)

我发现人们可以以一种方式或另一种方式寻找JsonValueKind.Array, 并做这样的事情

if (json.ValueKind.Equals(JsonValueKind.Array))
{
    foreach (var item in json.EnumerateArray())
    {
        foreach (var property in item.EnumerateObject())
        {
            await OverwriteProperty(???);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法做到这一点。

如何做到这一点并作为通用解决方案?

我想获得“结果 1”,其中添加/更新数组项,以及“结果 2”(当传递变量时),其中整个数组被替换。

对于“结果2”,我假设可以if (JsonValueKind.Array))OverwriteProperty方法中检测到,以及在哪里/如何传递“replaceArray”变量?...在迭代数组或对象时?

一些示例数据:

Json 字符串首字母

{
  "Title": "Startpage", …
Run Code Online (Sandbox Code Playgroud)

c# system.text.json asp.net-core-6.0

10
推荐指数
1
解决办法
6134
查看次数

System.Text.Json 合并两个对象

是否可以将这样的两个 json 对象与 System.Text.Json?

对象 1

{
   id: 1
   william: "shakespeare"
}
Run Code Online (Sandbox Code Playgroud)

对象 2

{
   william: "dafoe"
   foo: "bar"
}
Run Code Online (Sandbox Code Playgroud)

结果对象

{
    id: 1
    william: "dafoe"
    foo: "bar"
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样用 newtonsoft.json 实现它

var obj1 = JObject.Parse(obj1String);
var obj2 = JObject.Parse(obj2String);

obj1.Merge(obj2);
result = settings.ToString();
Run Code Online (Sandbox Code Playgroud)

但是有办法System.Text.Json吗?

c# json.net .net-core system.text.json

7
推荐指数
2
解决办法
3114
查看次数