相关疑难解决方法(0)

.NET - 枚举的jSON序列化为字符串

我有一个包含enum属性的类,在使用时序列化对象时JavaScriptSerializer,我的json结果包含枚举的整数值而不是它的string"name".有没有办法让枚举作为string我的json而不必创建自定义JavaScriptConverter?也许有一个属性,我可以装饰enum定义,或对象属性,?

举个例子:

enum Gender { Male, Female }

class Person
{
    int Age { get; set; }
    Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

期望的json结果:

{ "Age": 35, "Gender": "Male" }
Run Code Online (Sandbox Code Playgroud)

c# asp.net enums json javascriptserializer

1088
推荐指数
22
解决办法
42万
查看次数

wcf将enum反序列化为字符串

我正在尝试使用WCF使用RESTful Web服务.我无法控制Web服务的格式,所以我必须在这里和那里做一些解决方法.然而,我似乎无法解决的一个主要问题是如何使WCF将枚举反序列化为字符串.

这是我的代码(显然名称已更改):

[DataContract]
public enum Foo
{
    [EnumMember( Value = "bar" )]
    Bar,

    [EnumMember( Value = "baz" )]
    Baz
}

[DataContract]
public class UNameIt
{
    [DataMember( Name = "id" )]
    public long Id { get; private set; }

    [DataMember( Name = "name" )]
    public string Name { get; private set; }

    [DataMember( Name = "foo" )]
    public Foo Foo { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

这是反序列化失败的返回数据:

{
     "id":123456,
     "name":"John Doe",
     "foo":"bar"
}
Run Code Online (Sandbox Code Playgroud)

最后,抛出异常:

反序列化Service.Foo类型的对象时出错.值'bar'无法解析为'Int64'类型.

我不想切换到使用XmlSerializer,因为在它的许多其他缺点中,它不会让我在属性上拥有私有的setter.

如何使WCF(或者,DataContractSerializer)将我的枚举视为字符串值?

编辑:这似乎是不可能的,行为是它的设计方式.谢谢微软,不给我们选择,不得不诉诸黑客.按照somori建议的方式这样做似乎是获得带有JSON和WCF的字符串枚举的唯一方法.

.net c# wcf enums datacontractserializer

20
推荐指数
1
解决办法
1万
查看次数

自定义WCF DataContractSerializer

是否可以使用我自己的序列化程序替换Windows Communication Foundation中的dataContractSerializer.如果有可能,我该如何实现?

.net wcf serializer

11
推荐指数
1
解决办法
1万
查看次数