2016-05-03 3 views
0

У меня есть строка в формате JSON следующимИзменить строку JSON

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

Я хочу изменить эту строку так, что атрибут Id всегда должен быть первым. Порядок атрибутов имеет значение. Есть ли способ изменить эту строку.

Я пробовал искать Google, но не нашел подходящего решения. Любая помощь будет оценена по достоинству.

EDIT:

Я также попытался десериализация объекта с помощью

object yourOjbect = new JavaScriptSerializer().DeserializeObject(jsonStr); 

Но здесь также атрибут "типа" приходит первым. Я не нахожу никакого способа переместить атрибуты в этом десериализованном объекте

+4

* «Порядок атрибутов имеет значение». * Не в JSON, это не так. * «Объект является ** неупорядоченным ** набором пар имя/значение». * - http://json.org * (мой акцент) * –

+0

@ T.J.Crowder Да, вы правы. Но строка, которую я хочу, должна быть только в этом порядке, поскольку я сравниваю ее с другой строкой. –

+0

Вам нужно сравнить два объекта json? –

ответ

1

Это возможно. Используйте атрибут JsonProperty, свойство Order. http://www.newtonsoft.com/json/help/html/JsonPropertyOrder.htm. Сообщите мне, если это работает.

+0

@Microsoft DN, это помогло? Вам нужен какой-нибудь образец, чтобы заставить это работать? –

+0

Да, это помогло. Благодарю. –

-1

Просто сделайте свой JSON в класс C# с идентификатором сначала, а затем снова сериализуйте его, если это то, что вам нужно. Вы знаете, что у вас есть «Тип» дважды в строке JSON? В этом решении он получит «фиксированный», поэтому вы получите его только один раз, как и должно быть. Но если ваша строка действительно есть с двумя типами, это не будет работать, поскольку строки будут неверными. Если они действительно так, вам нужно сделать некоторые уродливые манипуляции с строками, чтобы исправить порядок, но я надеюсь, что первая строка неверна только здесь, а не в вашем коде.

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; } 
} 
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.

Смежные вопросы