修改JSON字符串

时间:2016-05-03 05:15:34

标签: c# json string

我有一个JSON格式的字符串,如下所示

string jsonStr = "{"Type":1, "Id":1000,"Date":null,"Group": "Admin","Country":"India","Type":1}";

我想修改此字符串,以便Id属性始终是第一个。属性的顺序很重要。 有什么方法可以修改这个字符串。

我尝试搜索谷歌但没有找到合适的解决方案。 任何帮助将不胜感激。

编辑:

我还尝试使用

反序列化对象
 object yourOjbect = new JavaScriptSerializer().DeserializeObject(jsonStr);

但这里也是"类型"属性是第一位的。我没有找到任何方法来移动这个反序列化对象中的属性

3 个答案:

答案 0 :(得分:1)

这是可能的。使用JsonProperty属性,属性Order。 http://www.newtonsoft.com/json/help/html/JsonPropertyOrder.htm。 如果有效,请告诉我。

答案 1 :(得分:0)

我不是试图操纵输出的JSON的顺序并比较字符串,而是将要比较的两个JSON字符串转换为对象,然后执行比较。然后,您可以将各个属性或整个对象与以下内容进行比较:

void CompareJSON()
{
    string json = @"{""Type"":1, ""Id"":1000,""Date"":null,""Group"": ""Admin"",""Country"":""India"",""Type"":1}";
    string jsonToCompare = "JSON TO COMPARE";

    MyObject myJsonObject = JsonConvert.DeserializeObject<MyObject>(json);
    MyObject myJsonObjectToCompare = JsonConvert.DeserializeObject<MyObject>(jsonToCompare);

    if (myJsonObject.Id == myJsonObjectToCompare.Id)
    {
        // Do something
    }
}

class MyObject
{
    public int Id { get; set; }
    public int Type { get; set; }
    public DateTime? Date { get; set; }
    public string Group { get; set; }
    public string Country { get; set; }
}

请注意,此示例是使用Newtonsoft.JSON库执行的。有关该库的更多信息可以在here找到。

答案 2 :(得分:-1)

首先使用Id将您的JSON转换为c#类,然后再次序列化它,如果这是您需要的。你知道你在JSON字符串中有两次“输入”吗?在这个解决方案中,它将被“修复”,因此你只需要它一次。但是如果你的字符串确实有两个Type,那么这个字符串将不正确。如果他们真的是那样你需要做一些丑陋的字符串操作来修复订单,但我希望第一个字符串只是在这里而不是你的代码中。

    private void Test() {
        string json = @"{""Type"":1, ""Id"":1000,""Date"":null,""Group"": ""Admin"",""Country"":""India"",""Type"":1}";

        JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
        MyJsonObject myJsonObject = jsonSerializer.Deserialize<MyJsonObject>(json);

        string s = jsonSerializer.Serialize(myJsonObject);
        //Returns: {"Id":1000,"Type":1,"Date":null,"Group":"Admin","Country":"India"}
    }


class MyJsonObject {
    public int Id { get; set; }
    public int Type { get; set; }
    public DateTime? Date { get; set; }
    public string Group { get; set; }
    public string Country { get; set; }
}