首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRasta AsJsonDataContract()字典

OpenRasta AsJsonDataContract()字典
EN

Stack Overflow用户
提问于 2012-07-18 07:55:58
回答 2查看 149关注 0票数 0

我正在使用OpenRasta为我的.NET应用程序提供一个应用程序接口。

我对它在使用Dictionaries时生成的JSON格式有一个问题。

我有以下配置:

代码语言:javascript
复制
 ResourceSpace.Has.ResourcesOfType<Dictionary<String,String>>()
.AtUri("/test")
.HandledBy<ProductHandler>()
.AsXmlDataContract()
.And.AsJsonDataContract();

ProductHandler返回以下字典:

代码语言:javascript
复制
        Dictionary<String, String> dict = new Dictionary<string, string>();
        dict.Add("foo1", "bar1");
        dict.Add("foo2", "bar2");
        dict.Add("foo3", "bar3");

我想要以下JSON:

代码语言:javascript
复制
{
    "foo1": "bar1",
    "foo2": "bar2",
    "foo3": "bar3"
}

但我得到的结果如下:

代码语言:javascript
复制
[
    {
        "Key": "foo1",
        "Value": "bar1"
    },
    {
        "Key": "foo2",
        "Value": "bar2"
    },
    {
        "Key": "foo3",
        "Value": "bar3"
    }
]

有什么建议如何解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-29 11:15:32

我最终使用Newtonsoft.Json库进行序列化,它提供了我想要的格式。

编解码器的代码是:

代码语言:javascript
复制
[MediaType("application/json;q=0.3", "json")]
[MediaType("text/html;q=0.3", "html")]
public class NewtonsoftJsonCodec : IMediaTypeReader, IMediaTypeWriter
{
    public object Configuration { get; set; }

    public object ReadFrom(IHttpEntity request, IType destinationType, string destinationName)
    {
        using (var streamReader = new StreamReader(request.Stream))
        {
            var ser = new JsonSerializer();

            return ser.Deserialize(streamReader, destinationType.StaticType);
        }

    }

    public void WriteTo(object entity, IHttpEntity response, string[] parameters)
    {
        if (entity == null)
            return;
        using (var textWriter = new StreamWriter(response.Stream))
        {
            var serializer = new JsonSerializer();
            serializer.NullValueHandling = NullValueHandling.Include;
            serializer.Serialize(textWriter, entity);
        }
    }
}

配置如下所示:

代码语言:javascript
复制
ResourceSpace.Uses.UriDecorator<ContentTypeExtensionUriDecorator>();
ResourceSpace.Has.ResourcesOfType<MeasurementDataFile[]>()
    .AtUri("/test")
    .HandledBy<MeasurementHandler>()
    .TranscodedBy<NewtonsoftJsonCodec>()
    .And.AsXmlDataContract();
票数 0
EN

Stack Overflow用户

发布于 2012-07-27 21:00:56

看一下JsonDictionary,

代码语言:javascript
复制
JsonDictionary items = new JsonDictionary();
Items.Add("someName1", "someValue1");
Items.Add("someName2", "someValue2");

序列化后,它会显示为

代码语言:javascript
复制
{"someName1":"someValue1","someName2":"someValue2"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11532507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档