标签: datacontractjsonserializer

如何使用DataContractJsonSerializer序列化匿名类型

使用下面的代码,我如何使用DataContractJsonSerializer将结果列表转换为JSON?

ETA:我已经看到了一些通用JSON-ize对象的扩展方法,但我不确定使用什么类型,因为这是一个匿名类型.

<Product> products = GetProductList();

var orderGroups =
 from p in products
 group p by p.Category into g
 select new { Category = g.Key, Products = g };
Run Code Online (Sandbox Code Playgroud)

谢谢!

c# json datacontractjsonserializer

5
推荐指数
1
解决办法
3371
查看次数

JSON样本到[DataContract]

是否有任何工具允许基于JSON样本生成DataContract实体定义?我真的错过了使用代码生成工具的旧的优秀WSDL元数据.

c# serialization json datacontract datacontractjsonserializer

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

如何使用没有字符集的DataContractJsonSerializer在C#中发送JSON?

我使用DataContractJsonSerializerStringContent以JSON发送到Web服务:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Employee));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, employee);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
StringContent jsonContent = new StringContent(sr.ReadToEnd(),
                               System.Text.Encoding.UTF8, "application/json");
// later I do HttpClient.PostAsync(uri, jsonContent)
Run Code Online (Sandbox Code Playgroud)

这会导致此Content-Type标头:

Content-Type: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

是否有可能离开字符集,只是有以下标题?

Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)

我没有看到一个超载StringContent就是这个.

c# datacontractjsonserializer

4
推荐指数
2
解决办法
7635
查看次数

我怎么知道一个类型是否可以使用Json.NET进行转换?

我正在尝试为内部存储数据的集合编写接口 JObject

internal class JsonDataSet : IDataSet
{
    private JObject Document { get; set; }

    // The following methods are from the IDataSet interface
    public int Count { ... }
    public void Add<T>(string key, T value) { ... }
    public T GetItem<T>(string key) { ... }
    public bool ContainsKey(string key) { ... }
}
Run Code Online (Sandbox Code Playgroud)

Add<T>方法中,如果自定义类型没有DataContract注释,我想提供一个有用的例外.例如,如果有人打电话:

dataSet.Add<IDictionary<string, IList<CustomType>>>(dict);
Run Code Online (Sandbox Code Playgroud)

"Cannot serialize type 'CustomType'. DataContract annotations not found."如果CustomType没有正确的注释,它将抛出异常.

到目前为止,我已经找到了一种方法来获取类型定义中的每个泛型参数,以便我可以检查它们:

private IEnumerable<Type> GetGenericArgumentsRecursively(Type type)
{
    if (!type.IsGenericType) …
Run Code Online (Sandbox Code Playgroud)

.net c# json json.net datacontractjsonserializer

4
推荐指数
1
解决办法
799
查看次数

正确的方法来处理JSON字符串中的&符号发送到REST Web服务

好,

我正在使用System.Runtime.SerializationDataContractJsonSerialization.

问题是在请求中我发送了一个带有该&字符的属性值.说,AT&T我得到一个错误的回复:Invalid JSON Data.

我认为转义将在库内完成,但现在我看到序列化没有触及&符号&.

是的,对于JSON格式,这是有效的.但是这对我的POST请求来说是一个问题,因为我需要将它发送到一个服务器,如果包含一个&符号会响应错误,因此我在这里.

HttpUtility.HtmlEncodeSystem.Web图书馆,所以要走的路是使用Uri.EscapeUriString.我这样做是为了尝试,但无论如何,没有它,所有请求都工作正常,除了一个&符号值.

编辑:HttpUtility类被移植到Windows Phone SDK,但编码字符串的首选方法应该仍然是Uri.EscapeUriString.

首先想到的是弄脏并开始更换会导致服务器出现问题的特殊字符,但是,我想知道,我应该做的另一个解决方案是,它是否有效且"正确"?

我应该说我用了

// Convert the string into a byte array.
byte[] postBytes = Encoding.UTF8.GetBytes(data);
Run Code Online (Sandbox Code Playgroud)

将JSON转换为a byte[]并写入Stream.和,

request.ContentType = "application/x-www-form-urlencoded";
Run Code Online (Sandbox Code Playgroud)

作为WebRequest.ContentType.

那么,我是因为某种原因而搞砸了?

谢谢.

c# json httpwebrequest windows-phone-8 datacontractjsonserializer

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

如何使用DataContractSerializer使用未命名的类型集合反序列化JSON

我正在使用网络服务获取有关路线里程的数据.然后我使用反序列化器来解析它.以下是JSON的外观:

[{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5]
Run Code Online (Sandbox Code Playgroud)

有了这个回应,我有几个问题.为什么包装成集合,如何设置对象模型?它还抱怨特殊的__type属性.所以,我做了"黑客"和"准备"字符串:

// Cut off first and last charachters [] - they send objects as arrays
rawJSON = rawJSON.Substring(1, rawJSON.Length - 2);

// Hide "__type" attribute as it messes up serializer with namespace
rawJSON = rawJSON.Replace("__type", "type");
Run Code Online (Sandbox Code Playgroud)

然后一切都使用这个对象:

[DataContract]
public class PCMilerResponse
{
    [DataMember(Name = "Errors", EmitDefaultValue = false)]
    public PCMilerError[] Errors { get; set; }

    [DataMember(Name = "TMiles", EmitDefaultValue = false)]
    public decimal DrivingDistance { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

现在我修改了对Web服务的调用,我得到了以下响应

[
{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5},
{"__type":"GeoTunnelReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"GeoTunnelPoints":
    [{"Lat":"34.730466","Lon":"-92.247147"},{"Lat":"34.704863","Lon":"-92.29329"},{"Lat":"34.676312","Lon":"-92.364654"},{"Lat":"29.664271","Lon":"-95.236735"}]
}
]
Run Code Online (Sandbox Code Playgroud)

现在有理由为什么有数组和"__type".但我不确定如何编写对象来正确解析它.我想需要应用特殊属性,可能需要通用数组吗?有关如何正确反序列化的任何帮助?

PS我可以做更多的黑客攻击并替换那些使其成为对象的字符串,但我不知道是否有"正确"的方法来处理它.

.net c# json datacontractserializer datacontractjsonserializer

3
推荐指数
1
解决办法
1341
查看次数

使用DataContractJsonSerializer作为json数组序列化对象

我有一个包含项目列表的类.我想使用DataContractJsonSerializer作为json数组将此类的实例序列化为json.例如.

class MyClass 
{
    List<MyItem> _items;
}

class MyItem
{
   public string Name {get;set;}
   public string Description {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

当序列化为json时,它应该是这样的:

[{"Name":"one","Description":"desc1"},{"Name":"two","Description":"desc2"}]

c# json datacontractserializer datacontractjsonserializer

2
推荐指数
1
解决办法
7951
查看次数

在没有第三方框架的情况下从HttpWebResponse反序列化JSON的方法

我试图避免依赖开源或第三方库(如Json.NET)来解析来自HttpWebResponse的传入JSON.为什么?因为越来越依赖开源框架来帮助实现,你的应用程序必须依赖这些依赖关系...我不喜欢我的应用程序在许多库中依赖于很多原因,如果可能的话.我可以使用像Enterprise Library这样的东西,因为它得到了MS的支持,但是我正在使用更多的开源库.

无论如何,我试图找出在.NET 3.5中解析传入JSON服务器端的最佳方法.

我知道这会得到很多响应,我甚至使用.NET 3.5 JavaScriptSerializer将数据序列化为JSON,但现在我正试图找出最好和最简单的方法来做反向,不用再做了使用第三方/开源框架来帮助实现这一目标.

c# asp.net serialization json datacontractjsonserializer

2
推荐指数
1
解决办法
5596
查看次数

防止使用datacontractjsonserializer C#序列化一个propery

我正在使用.net datacontractjsonserializer将我的对象列表序列化为JSON字符串,但是有些公共属性我不想序列化,如何防止datacontractjsonserializer序列化这些属性?

谢谢

.net c# datacontractjsonserializer

2
推荐指数
1
解决办法
1032
查看次数

DataContractJsonSerializer可以处理循环引用吗?

是否有DataContractSerializer 可以处理的序列化/反序列化方案,而DataContractJsonSerializer 不能

特别是,我正在考虑循环引用:这个MSDN页面解释了如何DataContractSerializer通过IsReference = trueDataContractAttribute构造函数中使用来管理循环引用.另一方面,DataContractAttribute.IsReference文档没有明确声明其适用性仅限于DataContractSerializer.

会不会DataContractJsonSerializer也兑现了IsReference财产?

.net c# json datacontractserializer datacontractjsonserializer

2
推荐指数
1
解决办法
1450
查看次数

使用DataContractJsonSerializer创建Non XML Json文件

我想使用DataContractJsonSerializer序列化为JsonFormat中的文件。问题在于该WriteObject方法只有XmlWriter,XmlDictionaryWriter和Stream三个选项。

为了得到我想要的东西,我使用了以下代码:

var js = new DataContractJsonSerializer(typeof(T), _knownTypes);
using (var ms = new MemoryStream())
{
   js.WriteObject(ms, item);
   ms.Position = 0;
   using (var sr = new StreamReader(ms))
   {
      using (var writer = new StreamWriter(path, false))
      {
         string jsonData = sr.ReadToEnd();
         writer.Write(jsonData);             
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

这是唯一的方法还是我错过了什么?

c# serialization json datacontractjsonserializer

1
推荐指数
2
解决办法
2307
查看次数