c# - 按字母顺序序列化 JSON

标签 c# json string serialization deserialization

情况是这样的,我首先从模型的每个类的对象生成 2 个 JSON。一个 JSON 来 self 当前的模型版本,另一个来自它的先前版本。 我的工作是比较每个 JSON 以找出两个模型之间的差异。

问题是,对象的属性没有以相同的顺序从一个 JSON 序列到另一个 JSON。

有没有一种方法可以按字母顺序序列化对象及其所有属性,以便我可以轻松比较两个字符串?

谢谢!

最佳答案

如果您只想对 2 个 json 字符串进行一次性比较,网络上有此资源

http://tlrobinson.net/projects/javascript-fun/jsondiff

在 Json.Net 中,JToken 上有一个 DeepEquals 可用。

var json1 = JToken.Parse(jsonString1);
var json2 = JToken.Parse(jsonString2);
var jsonEqual = JToken.DeepEquals(json1, json2);

如果您想完全按照您的要求订购序列化,请参阅这篇文章。

https://stackoverflow.com/a/11309106/1181408

更新 - 显示订单序列化工作正常。

public class OrderedContractResolver : DefaultContractResolver
{
    protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
    {
        return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName).ToList();
    }
}

public class JsonSerializationTest1
{
    public string Test1 { get; set; }
    public string MyTest2 { get; set; }
    public string Test2 { get; set; }
    public string Test10 { get; set; }
}

public class JsonSerializationTest2
{
    public string Test10 { get; set; }
    public string Test1 { get; set; }
    public string MyTest2 { get; set; }
    public string Test2 { get; set; }
}

[TestMethod]
    public void TestJsonOrder()
    {
        var test1 = new JsonSerializationTest1 { Test1 = "abc", MyTest2 = "efg", Test10 = "hij", Test2 = "zyx" };
        var test2 = new JsonSerializationTest2 { Test1 = "abc", Test10 = "hij", Test2 = "zyx", MyTest2 = "efg" };

        var test1Json = JsonConvert.SerializeObject(test1);
        var test2Json = JsonConvert.SerializeObject(test2);

        Assert.AreNotEqual(test1Json, test2Json);

        var settings = new JsonSerializerSettings()
        {
            ContractResolver = new OrderedContractResolver()
        };

        var json1 = JsonConvert.SerializeObject(test1, Formatting.Indented, settings);
        var json2 = JsonConvert.SerializeObject(test2, Formatting.Indented, settings);

        Assert.AreEqual(json1, json2);

    }

关于c# - 按字母顺序序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086873/

相关文章:

c# - ASP.NET MVC : directly assign value to model inside razor view

c# - 更改 EnableDesktopModeAutoInvoke 注册表值并使 TabTip.exe 接受更改

c# - 可以使用break进行外循环吗?

c# - 我如何从 JSON 字符串中获取值

javascript - JavaScript 中的全局变量问题

python - 检查字符串是否包含python中的数字/数字/数字

javascript - 如何通过 Jquery 向 C# 方法发送请求并获取其参数

iphone - 核心数据 NSObjectInaccessibleException NSManagedObject 已失效

c - 复合字符数组和字符串文字之间是否存在任何内部差异?

python - 需要帮助为我的字符串模式找到正确的正则表达式模式