C# 通过JsonDataContractCodec的OpenRasta返回列表

C# 通过JsonDataContractCodec的OpenRasta返回列表,c#,openrasta,C#,Openrasta,假设我有一个如下所示的资源: namespace OpenRastaApp.Resources { public class Foo { public string Bar { get; set; } } } 像这样的处理程序: namespace OpenRastaApp.Handlers { public class FooHandler { public object GetAll() {

假设我有一个如下所示的资源:

namespace OpenRastaApp.Resources
{
    public class Foo
    {
        public string Bar { get; set; }
    }
}
像这样的处理程序:

namespace OpenRastaApp.Handlers
{
    public class FooHandler
    {
        public object GetAll()
        {
            ArrayList foos = new ArrayList();
            foos.Add(new Foo() { Bar = "Hello," });
            foos.Add(new Foo() { Bar = " world!" });
            List<Foo> result = new List<Foo>(foos.ToArray(typeof(Foo)) as Foo[]);
            return result;
        }
        public object Get(int id)
        {
            return new Foo() { Bar = "Baz" };
        }
    }
}

但是,/foos根本不渲染。调试控制台显示消息“8-[2010-09-22 13:39:29Z]信息(0)未搜索响应编解码器。响应实体为null或已设置响应编解码器。”我已在返回前验证结果是否为非null。我也试着返回一个Foo[],但也有同样的错误。

找到了答案。必须按如下方式修改我的配置:

namespace OpenRastaApp
{
    public class Configuration : IConfigurationSource
    {
        public void Configure()
        {
            using (OpenRastaConfiguration.Manual)
            {
                ResourceSpace.Has.ResourcesOfType<List<Foo>>()
                    .AtUri("/foos")
                    .HandledBy<FooHandler>()
                    .AsJsonDataContract();
                ResourceSpace.Has.ResourcesOfType<Foo>()
                    .AtUri("/foos/{id}")
                    .HandledBy<FooHandler>()
                    .AsJsonDataContract();
            }
        }
    }
}
namespace OpenRastaApp
{
公共类配置:IConfigurationSource
{
public void Configure()
{
使用(OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType()
.AtUri(“/foos”)
.HandledBy()
.AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType()
.AtUri(“/foos/{id}”)
.HandledBy()
.AsJsonDataContract();
}
}
}

}
仅供参考,您还可以执行以下操作:

ResourceSpace.Has.ResourcesOfType<Foo>()
    .AtUri("/foos/{id}")
    .HandledBy<FooHandler>()
    .AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType<List<Foo>>()
    .WithoutUri
    .AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType()
.AtUri(“/foos/{id}”)
.HandledBy()
.AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType()
.没有URI
.AsJsonDataContract();

是的,我们应该真正更新文档。事物列表和事物列表是两种不同的资源。我们至少应该有一个警告/调试信息,让人们知道另一个选择是在任何情况下使用列表。至少,这是我开始走的路。在启动seb时的某种配置分析阶段?它可能会输出“我有什么”信息和uri,以便进行内部调试,以及每种类型支持的媒体类型?
namespace OpenRastaApp
{
    public class Configuration : IConfigurationSource
    {
        public void Configure()
        {
            using (OpenRastaConfiguration.Manual)
            {
                ResourceSpace.Has.ResourcesOfType<List<Foo>>()
                    .AtUri("/foos")
                    .HandledBy<FooHandler>()
                    .AsJsonDataContract();
                ResourceSpace.Has.ResourcesOfType<Foo>()
                    .AtUri("/foos/{id}")
                    .HandledBy<FooHandler>()
                    .AsJsonDataContract();
            }
        }
    }
}
ResourceSpace.Has.ResourcesOfType<Foo>()
    .AtUri("/foos/{id}")
    .HandledBy<FooHandler>()
    .AsJsonDataContract();
ResourceSpace.Has.ResourcesOfType<List<Foo>>()
    .WithoutUri
    .AsJsonDataContract();