English 中文(简体)
数据分析员与格式的JSON合作吗?
原标题:DataContractJsonSerializer doesn t work with formatted JSON?

在使用<代码>DataContractJsonSerializer时,如果该投入在其中(原名JSON)有表格,则序列器就放弃了一种例外情况(见下文)。 如果我用“”取代所有空间、表格和新线路,序列器就能够将其降为罚款。

交易是什么?

Exception

System.MemberAccessException: Cannot create an abstract class.
at System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) 
at System.Runtime.Serialization.FormatterServices.GetUninitializedObject(Type type) 
at System.Runtime.Serialization.XmlFormatReaderGenerator.UnsafeGetUninitializedObject(Int32 id) 
at ReadBaseSearchElementFromJson(XmlReaderDelegator , XmlObjectSerializerReadContextComplexJson , XmlDictionaryString , XmlDictionaryString[] ) 
at System.Runtime.Serialization.Json.JsonClassDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) 
at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract) 
at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, String name, String ns) 
at ReadSearchElementsFromJson(XmlReaderDelegator , XmlObjectSerializerReadContextComplexJson , XmlDictionaryString , XmlDictionaryString , CollectionDataContract ) 
at System.Runtime.Serialization.Json.JsonCollectionDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) 
at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract) 
at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, String name, String ns) 
at ReadSearchGroupFromJson(XmlReaderDelegator , XmlObjectSerializerReadContextComplexJson , XmlDictionaryString , XmlDictionaryString[] ) 
at System.Runtime.Serialization.Json.JsonClassDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) 
at System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) 
at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract& dataContract) 
at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns) 
at System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName) 
at System.Runtime.Serialization.XmlObjectSerializer.InternalReadObject(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver) 
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader reader) 
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream)

Formatted JSON

http://strong>does not deserialize,hanging the exception above.

{
    "Mode":"And",
    "Elements":
    [
        {
            "Name":"ID",
            "Operator":"Equal",
            "Value":"3"
        }
    ]
}

Non-formatted JSON

http://strong>does deserialize.

{"Mode":"And","Elements":[{"Name":"ID","Operator":"Equal","Value":"3"}]}

Update

I ve made a sample Solutions, 其中显示了这一问题。

最佳回答

您的多数形式实际上是罚款。 您在<代码>{ 和> > 类型之间可以搭建任何白色空间。

See this previous answer: JSON deseralization to abstract list using DataContractJsonSerializer

www.un.org/Depts/DGACM/index_spanish.htm 例如,你的样本代码正试图使这名JSON的扼杀:。

"{
	"Mode":"And",
	"Elements":
	[
		{
			"__type":"SearchParameter:#JsonTest.Search",
			"Name":"LastName",
			"Operator":"Equal",
			"Value":"Smith"
		},
		{
			"__type":"SearchGroup:#JsonTest.Search",
			"Mode":"Or",
			"Elements":
			[
				{
					"__type":"SearchParameter:#JsonTest.Search",
					"Name":"FirstName",
					"Operator":"Equal",
					"Value":"Tim"
				},
				{
					"__type":"SearchParameter:#JsonTest.Search",
					"Name":"FirstName",
					"Operator":"Equal",
					"Value":"Tom"
				}
			]
		}
	]
}"

格式:

{
    "Mode":"And",
    "Elements":
    [
        {
            "__type":"SearchParameter:#JsonTest.Search",
            "Name":"LastName",
            "Operator":"Equal",
            "Value":"Smith"
        },
        {
            "__type":"SearchGroup:#JsonTest.Search",
            "Mode":"Or",
            "Elements":
            [
                {
                    "__type":"SearchParameter:#JsonTest.Search",
                    "Name":"FirstName",
                    "Operator":"Equal",
                    "Value":"Tim"
                },
                {
                    "__type":"SearchParameter:#JsonTest.Search",
                    "Name":"FirstName",
                    "Operator":"Equal",
                    "Value":"Tom"
                }
            ]
        }
    ]
}

www.un.org/Depts/DGACM/index_spanish.htm 改动如下:

"{
	"Mode":"And",
	"Elements":
	[
		{"__type":"SearchParameter:#JsonTest.Search",
			"Name":"LastName",
			"Operator":"Equal",
			"Value":"Smith"
		},
		{"__type":"SearchGroup:#JsonTest.Search",
			"Mode":"Or",
			"Elements":
			[
				{"__type":"SearchParameter:#JsonTest.Search",
					"Name":"FirstName",
					"Operator":"Equal",
					"Value":"Tim"
				},
				{"__type":"SearchParameter:#JsonTest.Search",
					"Name":"FirstName",
					"Operator":"Equal",
					"Value":"Tom"
				}
			]
		}
	]
}"

格式:

{
    "Mode":"And",
    "Elements":
    [
        {"__type":"SearchParameter:#JsonTest.Search",
            "Name":"LastName",
            "Operator":"Equal",
            "Value":"Smith"
        },
        {"__type":"SearchGroup:#JsonTest.Search",
            "Mode":"Or",
            "Elements":
            [
                {"__type":"SearchParameter:#JsonTest.Search",
                    "Name":"FirstName",
                    "Operator":"Equal",
                    "Value":"Tim"
                },
                {"__type":"SearchParameter:#JsonTest.Search",
                    "Name":"FirstName",
                    "Operator":"Equal",
                    "Value":"Tom"
                }
            ]
        }
    ]
}
问题回答

Weird。 你们可能想审判JSON。 NET是JSON序列化和脱硫的冰箱。 我在最近的一个项目中使用了这一数据,并在数据ContractJsonSerializer失败的情况下开展工作。

可在http://json.codeplex.com/查询。

这对我来说非常重要:

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

public class SomeModel
{
    public string Mode { get; set; }
    public IEnumerable<Element> Elements { get; set; }
}

public class Element
{
    public string Name { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

class Program
{
    static void Main()
    {
        var json =
@"{
    ""Mode"":""And"",
    ""Elements"":
    [
        {
            ""Name"":""ID"",
            ""Operator"":""Equal"",
            ""Value"":""3""
        }
    ]
}";
        var serializer = new DataContractJsonSerializer(typeof(SomeModel));
        using (var stream = new MemoryStream(Encoding.Default.GetBytes(json)))
        {
            var model = (SomeModel)serializer.ReadObject(stream);
            Console.WriteLine(model.Mode);
            foreach (var element in model.Elements)
            {
                Console.WriteLine(element.Name);
                Console.WriteLine(element.Operator);
                Console.WriteLine(element.Value);
            }
        }
    }
}




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签