javascript - 如何将此 json 转换为 C# 对象

标签 javascript c# json

我从第三方收到这个 JSON,因此无法控制它,

{
    code: 200,
    message: success,
    data: {
        categories: {
            0: {
                prop1: 100,
                prop2: blah
            },
            1: {
                prop1: 100,
                prop2: blah
            }
                    // etc.. etc.. it may return around 100 or more categories or less
        }
    }
}

现在我正在尝试将其转换为 C# 对象,

[DataContract]
public class Category
{
    [DataMember] public string prop1 { get; set; }
    [DataMember] public string prop2 { get; set; }
}

[DataContract]
public class Data
{
    [DataMember]
    public List<Category> categories { get; set; }
}

[DataContract]
public class RootObject
{
    [DataMember]
    public int code { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public Data data { get; set; }
}

和转换它的代码,

   var response = LoadPageAsync(url).Result;
   var serializer = new JavaScriptSerializer();
   var rootObject = serializer.Deserialize<RootObject>(response);

问题是我得到的类别计数为零,即使 JSON 本身有很多。

最佳答案

您需要将类别列表更改为字典。测试了以下代码,我根据需要实现了反序列化。还值得注意的是,如果字符串周围没有引号,您的 json 实际上是无效。我也使用了 JSON.Net,但这应该无关紧要。

[DataContract]
public class Category
{
    [DataMember] public string prop1 { get; set; }
    [DataMember] public string prop2 { get; set; }
}

[DataContract]
public class Data
{
    [DataMember]
    public Dictionary<int, Category> categories { get; set; }
}

[DataContract]
public class RootObject
{
    [DataMember]
    public int code { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public Data data { get; set; }
}

static void Main(string[] args)
{
    var root = new RootObject()
    {
        code = 1,
        message = "test",
        data = new Data()
        {
            categories = new Dictionary<int, Category>()
            {
                { 0, new Category()
                    {
                        prop1 = "cat1prop1",
                        prop2 = "cat1prop2"
                    }
                },
                { 1,  new Category()
                    {
                        prop1 = "cat2prop1",
                        prop2 = "cat2prop2"
                    }
                }
            }
        }
    };
    var testJson = "{code: 200,message: \"success\",data: {categories: {0: {prop1: 100,prop2: \"blah\"},1: {prop1: 100,prop2: \"blah\"}}}}";
    var json = JsonConvert.SerializeObject(root);
    var testConvert = JsonConvert.DeserializeObject<RootObject>(testJson);
}

关于javascript - 如何将此 json 转换为 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46292884/

相关文章:

javascript - 当内容超过页面大小时如何设置div可滚动?

javascript - AngularJS 中的自定义和标准多个过滤器

javascript - 在出于 SEO 目的呈现之前替换 dom 内容

c# - 在派生类上强制实现属性

c# - 我应该如何构建我的 View 模型 - ASP.NET MVC

javascript - 如何将 Encoded url 转换成 JSON 格式?

javascript - 在响应式 JQuery/CSS 菜单中显示子项

c# - 如何在运行时在 IEnumerable<T> 上创建动态多属性 Select?

java - 如何解析来自 Unirest 调用的 JSON 结果

javascript - 在数据事件中访问 c​​3js 中的数据值