JsonDiffpatch().Diff() 无法将电子邮件地址和字符串与“@”进行比较?

问题描述 投票:0回答:1

我正在尝试使用

JsonDiffpatch().Diff()
比较两个 JSON 字符串。

var oldJson = {"Author":"admin","Description":"","LastEditedBy":"admin","LastModifiedDate":"8/3/2023 8:53:09 AM","Name":"Export-5","RecipientEmails":"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"};

var currentJson = {"Author":"admin","Description":"","LastEditedBy":"admin","LastModifiedDate":"8/3/2023 8:58:14 AM","Name":"Export-5","RecipientEmails":"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"}

JToken diff = new JsonDiffPatch().Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));

当字符串中没有电子邮件地址时,它可以正常工作。但是,通过电子邮件地址列表,我得到以下区别:

"LastModifiedDate": [
  "8/3/2023 8:53:09 AM",
  "8/3/2023 8:58:14 AM"
]
"RecipientEmails": [
  "@@ -1,20 +1,19 @@\n [email protected]\n-m\n ,[email protected],aaq\n",
  0,
  2
]


为什么我会在输出中得到额外的字符?我怎样才能摆脱它们并给出一系列差异?

这是代码示例:

using System;
using JsonDiffPatchDotNet;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
        string oldJson = "{\"RecipientEmails\":\"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]\"}";
        string currentJson = "{\"RecipientEmails\":\"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]\"}";
        JToken diff = new JsonDiffPatch().Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));
        Console.WriteLine(diff);
    }
}
c# json .net diff
1个回答
0
投票

使用简单文本差异模式:

var diff = new JsonDiffPatch(new Options
    {
        TextDiff = TextDiffMode.Simple
    })
    .Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));

问题不是电子邮件,而是

RecipientEmails
的长度,似乎默认模式(
TextDiffMode.Efficient
)会为长字符串生成git风格的差异。

© www.soinside.com 2019 - 2024. All rights reserved.