【问题标题】:Generate XML or JSON given a C# class给定 C# 类生成 XML 或 JSON
【发布时间】:2016-03-03 14:12:26
【问题描述】:

希望这不会违反“推荐或查找工具、库或最喜欢的非现场资源”的离题规则,但无论如何都可以。

如果您从事数据库开发,那么您可能会熟悉将样本数据放入表中以进行测试的工具。

我想知道是否有任何方法 [0] 可以采用标记为可序列化的模型类并从用适当属性修饰的属性生成示例 XML 或 JSON。

在 SO 和其他地方都有很多关于从 JSON 或 XML 生成 C# 类的问题,但我想要的略有不同。

这里的具体用例是我正在等待来自另一个开发人员的 JSON 输出,并想知道是否有一种方法可以让我快速启动,以便我可以使用这种方法测试我的代码,无论这种方法可能是什么。

我只是使用标准的 XML 序列化器和 JSON.NET 库,但如果需要,可以切换到其他东西。

[0] 我知道我可以编写可以使用反射实例化类的代码,然后反射到该实例中并以这种方式编写 XML 或 JSON,但这本身就是一个大项目。我希望 .NET Framework 中存在一种预先存在的方式或某种 FOSS 工具

【问题讨论】:

  • 您需要 XmlSerializer 和 JSON.NET 不提供的功能吗?你的意思是你想要一个工具(是的,那是题外话)根据模型的数据类型为模型的属性生成数据?所以你给它一个类定义,它给你用垃圾数据实例化的类,然后你可以序列化?然后查看Are there any tools to populate class properties with random data?
  • @CodeCaster 如果您想充实这一点,那是一个非常好的答案候选者
  • 好吧,不,如果你真的在寻找一个工具或库,你可以提供一个类定义,并给你一个填充随机数据的类的实例,那是题外话重复。所以我真的不想把它作为答案发布。 :)
  • @CodeCaster 点了,谢谢

标签: c# json xml serialization


【解决方案1】:

您可以使用一些单元测试工具来帮助您。

例如,nBuilder 可以使用示例数据填充您的属性,然后将其序列化为 json。

void Main()
{
    var samplePerson = Builder<Person>.CreateNew().Build();

    var json = JsonConvert.SerializeObject(samplePerson);

    //outputs {"Name":"Name1","Age":1} to the screen
    json.Dump();
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

这是 linqpad 代码: http://share.linqpad.net/prur3p.linq

然而,这显然不会使用您的属性属性来提供帮助。

更详细的例子:

var hierarchySpec = Builder<HierarchySpec<Category>>.CreateNew()
                .With(x => x.AddMethod = (parent, child) => parent.AddChild(child))
                .With(x => x.Depth = 5)
                .With(x => x.MaximumChildren = 10)
                .With(x => x.MinimumChildren = 5)
                .With(x => x.NamingMethod = (cat, title) => cat.Title = "Category " + title)
                .With(x => x.NumberOfRoots = 10).Build();

            Builder<Category>.CreateListOfSize(2500).BuildHierarchy(hierarchySpec);

(https://github.com/garethdown44/nbuilder/#hierarchy-generation)


附注:

除非您正在进行“end 2 end”测试...您的问题确实让我认为您可能对另一个组件有硬编码依赖。您应该能够测试您的代码,而无需准备好其他组件(特别是如果来自其他开发人员)。如果您还不熟悉它,我建议您阅读martin fowler's discussion about mocks 来模拟依赖组件的行为。如果您只是进行端到端测试并且了解单元测试/模拟等所有内容,请忘记这一段。 :-)

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多