Скопируйте RootNode в ChildNode в JSON - PullRequest
2 голосов
/ 18 апреля 2019

Я получил ответ от Firebase ниже.Мне нужно скопировать автоматически сгенерированный корневой узел как дочерний узел.

{
"-LcjpjUB1ucnzDabnHa9": {
    "CustomerId": "9ff2a33e-815e-4d24-9985-2905c3460d8d",
    "DateTime": "4/18/2019 3:16:11 PM",
    "Id": "b59692a0-7fde-4132-aad7-d18a1aad690d",
    "OrderId": 11
},
"-Lcjs_DeDR8Q7kbuAdLo": {
    "CustomerId": "9ff2a33e-815e-4d24-9985-2905c3460d8d",
    "DateTime": "4/18/2019 3:28:33 PM",
    "Id": "be676d81-fa3f-4caa-8ea3-b921a705a09a",
    "OrderId": 12
}
}

Ожидаемый вывод

{
"-LcjpjUB1ucnzDabnHa9": {
    "AutoId":"-LcjpjUB1ucnzDabnHa9",
    "CustomerId": "9ff2a33e-815e-4d24-9985-2905c3460d8d",
    "DateTime": "4/18/2019 3:16:11 PM",
    "Id": "b59692a0-7fde-4132-aad7-d18a1aad690d",
    "OrderId": 11
},
"-Lcjs_DeDR8Q7kbuAdLo": {
    "AutoId":"-Lcjs_DeDR8Q7kbuAdLo",
    "CustomerId": "9ff2a33e-815e-4d24-9985-2905c3460d8d",
    "DateTime": "4/18/2019 3:28:33 PM",
    "Id": "be676d81-fa3f-4caa-8ea3-b921a705a09a",
    "OrderId": 12
}
}

Я преобразовал строку FireBaseResponse в вышеприведенную модель, используя JObject json = JObject.Parse(firebaseResponse.Body);

Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Вы можете использовать Add метод JObject. Выполните итерацию по свойствам json и добавьте новое в каждом узле:

var input = "{\r\n\"-LcjpjUB1ucnzDabnHa9\": {\r\n    \"CustomerId\": \"9ff2a33e-815e-4d24-9985-2905c3460d8d\",\r\n    \"DateTime\": \"4/18/2019 3:16:11 PM\",\r\n    \"Id\": \"b59692a0-7fde-4132-aad7-d18a1aad690d\",\r\n    \"OrderId\": 11\r\n},\r\n\"-Lcjs_DeDR8Q7kbuAdLo\": {\r\n    \"CustomerId\": \"9ff2a33e-815e-4d24-9985-2905c3460d8d\",\r\n    \"DateTime\": \"4/18/2019 3:28:33 PM\",\r\n    \"Id\": \"be676d81-fa3f-4caa-8ea3-b921a705a09a\",\r\n    \"OrderId\": 12\r\n}\r\n}";

var json = JObject.Parse(input);
foreach (var token in json)
{
    var jObject = (JObject) token.Value;
    jObject.Add("AutoId", new JValue(token.Key));
}

var result = json.ToString(Formatting.Indented);
1 голос
/ 18 апреля 2019

1) Просто переберите все свойства JObject, которые вы проанализировали.

2) Добавить новое свойство как AutoID со значением в качестве родительского имени для дочерних объектов.

3) И затем присвойте этот дочерний объект как он есть родительскому объекту в JObject.

JObject jObject = JObject.Parse(firebaseResponse.Body);

foreach (var prop in jObject.Properties())
{
    jObject[prop.Name] = JObject.FromObject(new
    {
        AutoId = prop.Name,                       //<= Child object name here
        CustomerId = prop.Value["CustomerId"],    //<= Remaining properties as it is
        DateTime = prop.Value["DateTime"],
        Id = prop.Value["Id"],
        OrderId = prop.Value["OrderId"]
    });
}

string outputJson = jObject.ToString();

Вывод: (из отладчика)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...