javascript - C# 如何将复杂的 JSON 对象的子对象转换为模型

标签 javascript c# json ajax

我正在从一个模型进行转换并将其序列化以发送到一个网页,然后可以在该网页上编辑 JSON。编辑后,我使用 AJAX 将更新后的 JSON 发送到代码后面,我需要将其转换回原始模型。在第一次序列化模型时,它会维护一个 JSON 数组,然后是 JSON 对象。使用 JSON.Stringify 后,JSON Array 变成了 JSON Objects 的 JSON Object。我正在处理多个 JSON 对象,这些对象被显示和编辑以发送到后面的代码。接收到的字符串格式为

{"0":

    {"Id":{},
    "ItemNumber":"1",
    "Person":{
        "PersonNumber": "001",
        "Address": {
            "Street": "Test street 123"
            },
        "email": "test@email.com"
        },
    "Contact": {
        "Name" : "Company A"
        },
    "Quantity" : "12"
    },
"1": etc,
}

我想遍历充当对象键的每个数字,但是尝试将其映射到字典或反序列化对象会将数据变成 {{ "Id":{}, "ItemNumber" : "1", "Person": {etc }}我想我已经关注这个问题很久了,解决方案就在我面前,我想太多了,我似乎无法找到以与模型匹配的形式获取信息的正确方法我正在尝试将其转换为。

使用 JsonConvert反序列化为 Dictionary<string,Object>让我非常接近,但我仍然遇到了

{
    {
    "Id":{},
    "ItemNumber":"1", 
    etc
    }
}

对于单个对象。如果我可以去掉每个对象的外层括号,我相信这将是正确的格式,但我不知道该怎么做。我觉得我正在以错误的方式解决这个问题,也许有一种更简单的方法可以用 for 循环索引 Json 对象。有没有属于JsonConvert的方法/JObject可以帮助或使此转换更清晰,可能来自 JToken

这是代码隐藏的一些代码。

[WebMethod]
public static string UpdateItems(string json) //json = {"0":{"Id": etc}}
{
    var result = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); // returns key "0", value { { Format my desired model is in } }
// My goal is to convert it back to the original object like
// JsonConvert.DeserializeObject<Dictionary<string, OriginalModel>> rather than creating a new class
}

最佳答案

您可以使用 this site 从您的 json 生成类或 Visual Studio:

public class Id
{
}

public class Address
{
    public string Street { get; set; }
}

public class Person
{
    public string PersonNumber { get; set; }
    public Address Address { get; set; }
    public string email { get; set; }
}

public class Contact
{
    public string Name { get; set; }
}

public class NestedObject
{
    public Id Id { get; set; }
    public string ItemNumber { get; set; }
    public Person Person { get; set; }
    public Contact Contact { get; set; }
    public string Quantity { get; set; }
}

现在您可以反序列化您的输入:

var input = "{\"0\":      {\"Id\":{},     \"ItemNumber\":\"1\",     \"Person\":{         \"PersonNumber\": \"001\",         \"Address\": {             \"Street\": \"Test street 123\"             },         \"email\": \"test@email.com\"         },     \"Contact\": {         \"Name\" : \"Company A\"         },     \"Quantity\" : \"12\"     },  }";
var result = JsonConvert.DeserializeObject<Dictionary<string, NestedObject>>(input);

关于javascript - C# 如何将复杂的 JSON 对象的子对象转换为模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55395403/

相关文章:

javascript - 在 Vanilla JS 中点击动态加载图像

javascript - 使用 jquery 选择一个选择选项不起作用

javascript - Uncaught ReferenceError : function is not defined error when calling riot function

javascript - 为什么 "window.top.location"在 iframe 中工作?

javascript - 正则表达式删除 json 属性

c# - 用C#编程IBM iSeries API QUSLSPL

c# - MSMQ 连接缓存安全漏洞?

c# - 如何更改VM中 map 的MapType?

json - Azure 逻辑应用解析 Json 引发错误

android - 向一个 url 发送咨询,但 JSON 返回始终为 null