我有一个JSON格式的字符串,如下所示
string jsonStr = "{"Type":1, "Id":1000,"Date":null,"Group": "Admin","Country":"India","Type":1}";
我想修改此字符串,以便Id属性始终是第一个。属性的顺序很重要。 有什么方法可以修改这个字符串。
我尝试搜索谷歌但没有找到合适的解决方案。 任何帮助将不胜感激。
编辑:
我还尝试使用
反序列化对象 object yourOjbect = new JavaScriptSerializer().DeserializeObject(jsonStr);
但这里也是"类型"属性是第一位的。我没有找到任何方法来移动这个反序列化对象中的属性
答案 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; }
}